在 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/