balance()函数无法正常工作

时间:2018-11-29 04:40:24

标签: 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);
      }

1 个答案:

答案 0 :(得分:0)

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

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