1.樹節點的聲明:
由於在AVL平衡樹中需要對高度進行判斷,因此比二叉樹多了高度變量。
struct AvlNode //樹節點
{
int Data;
AvlNode* Left;
AvlNode* Right;
int Height;
};
typedef AvlNode* Position;
typedef AvlNode* AvlTree;
2.一些常用的樹操作:
AvlTree MakeEmpty(AvlTree T) //刪除一整個樹
{
if (T != NULL)
{
MakeEmpty(T->Left);
MakeEmpty(T->Right);
free(T);
}
return NULL;
}
Position Find(int x, AvlTree T) //在樹中查找某元素
{
if (x < T->Data)
Find(x, T->Left);
else if (x > T->Data)
Find(x, T->Right);
else if (x == T->Data)
return T;
else
return NULL;
}
Position FindMax(AvlTree T) //查找樹中最大值
{
if (T->Right == NULL)
return T;
else
FindMax(T->Right);
}
Position FindMin(AvlTree T) //查找樹中最小值
{
if (T->Left == NULL)
return T;
else
FindMin(T->Left);
}
int Max(int a, int b) //查找兩個數中的最大值
{
if (a > b)
return a;
else
return b;
}
static int Height(Position P) //求某節點高度
{
if (P == NULL)
return -1;
else
return P->Height;
}