c - Balance() 函数无法正常工作

标签 c data-structures binary-search-tree avl-tree

在 bf() 函数中,我尝试将平衡因子分配给我的 AVL 树 的每个节点。当我通过传递树从 main() 函数调用该函数时,第一次迭代工作得很好。但在第一次递归之后,balance() 函数没有响应,代码也不再继续。 我已经打印了 'g''m' 字母来了解代码在哪里工作。 当我从主函数调用时,'g'仅打印一次,但'm'甚至一次都没有打印。

int balance(struct node *tree)
{
  int lh,rh;
  if(tree==NULL)
  return 0;
  else
  {
  lh=balance(tree->left);
  rh=balance(tree->right);
  return (lh+1)-(rh+1);
  }
  }

void bf(struct node *tree)
      {
        tree->bfactor=balance(tree);  //not proceeding after this step after first recursion.
        printf("g");
        bf(tree->left);
        printf("m");
        bf(tree->right);
      }

最佳答案

bf() 函数仅在树不等于 NULL 时才起作用。只需将此条件添加到 bf() 函数即可使其正常工作。

void bf(struct node *tree)
  {  
       if(tree!=NULL)
       {
           tree->bfactor=balance(tree);
           bf(tree->left);
           bf(tree->right);
       }
  }

关于c - Balance() 函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531941/

相关文章:

C - 如何从位字段接收位作为函数中的参数?

c - 停止程序的简单有效方法

C 数据类型现实生活示例

algorithm - 持续更新优先级队列的最佳算法/数据结构

c - 我怎样才能加快我的最小二叉树深度函数?

c++ - BST的节点值如何从高到低输出?

c++ - C 和 C++ 中 const 变量的不同输出

c - 如何评估 c 中的结构并通过指针变量给出输入?

java - 如何使用树找到最长的公共(public)子串?

c++ - 链表数据访问