当我递归调用插入函数以将节点添加到 AVL 树时,如何计算特定节点的平衡因子。我还没有开始旋转逻辑。我只是想计算平衡因子。
在我目前的尝试中,我被迫存储左右子树的高度,因为没有它们我找不到平衡因子。
typedef struct _avlTree
{
int num;
int balFactor;
int height[2]; // left & right subtree heights
struct _avlTree *left,*right;
} *avlTree;
int avlAdd(avlTree a,avlTree aNew)
{
...
if(a->left == NULL) // left subtree insertion case
{
a->left = aNew;
return(1);
}
else
{
a->height[0] = avlAdd(a->left,aNew);
a->balFactor = a->height[0] - a->height[1];
return( (a->height[0]>a->height[1]) ? (a->height[0]+1) : (a->height[1]+1) );
}
...
}