Position FindMax(SearchTree T)
{
if(T != NULL)
while(T -> Right != NULL)
{
T = T -> Right;
}
return T;
}
插入元素到二叉查找树:
SearchTree Insert(ElementType X, SearchTree T)
{
if(T == NULL)
{
T = malloc(sizeof(struct TreeNode));
if(T == NUU) Error("Out of space");
else
{
T -> Element = X;
T -> Left = T -> Right = NULL;
}
}
else if(X < T -> Element)
{
T -> Left = Insert(X, T);
}
else if(X > T -> Element)
{
T -> Right = Insert(X, T);
}
return T;
}
SearchTree Delete(ElementType X, SearchTree)
{
Position TmpCell;
if(T == NULL)
Error("Element not Found");
else if(X < T -> Element)
T -> Left = Delete(X, T -> Left);
else if(X > T -> Element)
T -> Right = Delete(X, T -> Right);
else if(T -> Left && T -> Right) //Two Children
{
TmpCell = FindMin(T -> Right);
T -> Element = TmpCell -> Element;
T -> Right = Delete(T -> Element, T -> Right);
}
else //One or Zero Children
{
TmpCell = T;
if(T -> Left == NULL)
T = T -> Right;
else if(T-> Right == NULL)
T = T -> Left;
free(TmpCell);
}
return T;
}