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) );
}
...
}