在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);
}
答案 0 :(得分:0)
仅当树不等于NULL时bf()函数才应起作用。只需将此条件添加到bf()函数中,即可使其工作正常。
void bf(struct node *tree)
{
if(tree!=NULL)
{
tree->bfactor=balance(tree);
bf(tree->left);
bf(tree->right);
}
}