【问题标题】:The balance() function is not working properlybalance() 函数无法正常工作
【发布时间】:2018-11-29 04:40:23
【问题描述】:

在 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 应该为一棵空树做什么? (一旦你回答了这个问题,试着让你的算法更高效,它现在是 O(n^2),这使得整个事情变得毫无用处)。
  • OT:为了便于阅读和理解:1) 一致地缩进代码。在每个左大括号“{”后缩进。在每个右大括号 '}' 之前取消缩进。建议每个缩进级别为 4 个空格。 2) 函数名称应该是“活动的”并表明函数的作用。 'bt' 毫无意义,即使在当前上下文中也是如此。
  • 强烈建议使用调试器(如gdb)单步执行您的程序,以确定程序没有按照您的预期执行的地方
  • 而不是发布一些代码sn-p。发布一个 minimal reproducible example 来显示问题,以便我们帮助您调试它。
  • 这是一个最小且完整的代码。完整版代码212行。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-12-15
    • 2013-03-27
    • 2012-08-15
    • 2013-11-05
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多