【发布时间】: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