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);
}


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

最佳答案

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->lNULL

关于c - 使用有序遍历在二叉树中查找最大元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30584570/

10-14 16:08