使用inorder遍历查找二叉树中的最大元素

时间:2015-06-01 22:46:37

标签: c data-structures

void inorder(struct btnode *t)
{
    if (root == NULL)
    {
        printf("No elements in a tree to display");
        return;
    }
    max=t->value;
    if (t->l != NULL) 
    {
    inorder(t->l);
    if(max<t->value)
        {
        max=t->value;   
        }
    }   

    if (t->r != NULL)    
    {
    inorder(t->l);
    if(max<t->value)
        {
        max=t->value;   
        }
    }   
    printf("max=%d\n",max);
}

我正在尝试实现inorder遍历以查找二叉树中的最大元素。我写的代码似乎没有返回结果。顺便说一句,我使用的max变量被声明为全局变量并初始化为零。谁能告诉我这里哪里出错了?先谢谢你!

1 个答案:

答案 0 :(得分:3)

max=t->value;设置没有条件的值。 @David van rijn

void inorder(const struct btnode *t) {
    if (root == NULL) {
        printf("No elements in a tree to display");
        return;
    }
    if(max<t->value) {  // Add test
      max=t->value;
    }
    if (t->l != NULL) {
      inorder(t->l);
    }   
    if (t->r != NULL) {
      // inorder(t->l);  Wrong leaf.
      inorder(t->r);
    }   
    // Best to print from calling routine
    // printf("max=%d\n",max);
}

void foo(const struct btnode *t) {
  max = INT_MIN;  // Set to minimum `int` value.
  inorder(t);
  printf("max=%d\n",max);
}
OP提到代码崩溃了。当然这是因为在if (t->r != NULL) { inorder(t->l);t->l NULL遍历了错误的叶子。{/ p>