链接
BinTree Insert(BinTree BST, ElementType X) {
if(!BST) {
BST = (BinTree)malloc(sizeof(struct TNode));
BST->Left = NULL;
BST->Right = NULL;
BST->Data = X;
}
else if (X < BST->Data) {
BST->Left = Insert(BST->Left, X);
}
else if(X > BST->Data){
BST->Right = Insert(BST->Right, X);
}
return BST;
}
BinTree Delete( BinTree BST, ElementType X ){
BinTree temp;
if(!BST){
printf("Not Found\n");
return BST;
}
if(X > BST -> Data){
BST -> Right = Delete(BST -> Right, X);
}
else if(X < BST -> Data){
BST -> Left = Delete(BST -> Left, X);
}
else{
if(BST -> Left && BST -> Right){
temp = FindMax(BST->Left);
BST->Data = temp->Data;
BST->Left = Delete(BST->Left, BST->Data);
}
else{
temp = BST;
if(!BST -> Left){
BST = BST -> Right;
}
else if(!BST -> Right){
BST = BST -> Left;
}
free(temp);
}
}
return BST;
}
Position Find(BinTree BST, ElementType X) {
if (!BST)
return NULL;
if (X < BST->Data) {
return Find(BST->Left, X);
}
else if (X > BST->Data) {
return Find(BST->Right, X);
}
else
return BST;
}
Position FindMin(BinTree BST) {
if (BST) {
while (BST->Left != NULL) {
BST = BST->Left;
}
}
return BST;
}
Position FindMax(BinTree BST) {
if (BST) {
while (BST->Right != NULL) {
BST = BST->Right;
}
}
return BST;
}