2015-04-01 78 views
-1

这是我的代码看起来查找二叉树的最小数量递归

int main() { 
//root is the rootnode of the tree 
    if(root!==NULL) { 
     int mini = min(root, root->data); 
     printf("minimum number is %d", mini); 
    } 
    return 0; 
} 

int min(node *root, int mini) { 

    if(root == NULL) { 
     return; 
    } 
    min(root->left, mini); 
    min(root->right, mini); 
    if(mini > root->data) { 
     mini = root->data; 
    } 
    return mini; 
} 

它不给我最小数目的树。相反,它将根节点打印为最小值。

+1

'min(root-> left,mini);' - 你觉得这条线是干什么的? – immibis 2015-04-01 07:38:48

+1

不,这不是什么线......想一想,min函数做了什么? (或者至少,它应该做什么?) – immibis 2015-04-01 07:42:47

+1

提示:为什么你的递归函数返回一个整数?被丢弃? – 2015-04-01 07:48:33

回答

0

试试这个:

int min(node *root, int mini) { 

    if(root == NULL) { 
     return -1; 
    } 
    int a; 
    a=min(root->left, mini); 
    if(a<mini) 
     mini=a; 
    a=min(root->right, mini); 
    if(a<mini) 
     mini=a; 
    if(root->data<mini) 
     mini = root->data; 
    return mini; 
} 
+0

似乎很奇怪返回-1的情况下为NULL。当树为空时, – 4386427 2015-04-01 08:24:40

+0

返回-1。 – skrtbhtngr 2015-04-02 13:06:29

+0

因为在调用'min(root - > ...)之前,你的代码没有检查'root-> left'和'root-> right'是NULL,你的代码总是会在叶子上用NULL指针调用。如果一棵树由纯正数据组成,你的代码将总是给出-1的结果。我认为你需要在NULL指针输入的情况下返回'mini'。 – 4386427 2015-04-03 05:58:31

4

您需要使用递归调用的结果,而不是扔掉的。
它们应该是子树的最小值。

在一个树中的最小值是

  • 根值的最小
  • 在左子树的值,如果有一个
  • 在右子树的值,如果有一个

像这样:

int min(node *root) 
{ 
    int least = root->data; 
    if (root->left != NULL) 
    { 
     least = std::min(least, min(root->left)); 
    } 
    if (root->right != NULL) 
    { 
     least = std::min(least, min(root->right)); 
    } 
    return least; 
} 
+0

我怀疑你的代码会工作。它似乎只是覆盖“最少”,没有与当前的最小值进行比较。 – 4386427 2015-04-01 08:23:44

+0

@nielsen你应该查找'std :: min'。 – molbdnilo 2015-04-01 08:25:16

+0

@ molbdnilo - 我被名字最小的两个函数所愚弄。我的错误 - 对不起。 – 4386427 2015-04-01 08:26:53

0

这适用于我。不放弃返回值。

int main() { 
//root is the rootnode of the tree 
    if(root!==NULL) { 
     int mini = min(root, root->data); 
     printf("minimum number is %d", mini); 
    } 
    return 0; 
} 

int min(node *root, int mini) { 

    if(root == NULL) { 
     return; 
    } 
    mini = min(root->left, mini); 
    mini = min(root->right, mini); 
    if(mini > root->data) { 
     mini = root->data; 
    } 
    return mini; 
} 
+0

代码无法编译。 'if(root == NULL){return; }'不是返回一个'int'。我想你想'回到迷你';? – 4386427 2015-04-03 06:07:26