04-树7 二叉搜索树的操作集 (30分)
Position Find( BinTree BST, ElementType X ) {
if(!BST) {
return NULL;
} else {
while(BST) {
if(BST->Data<X)
BST=BST->Right;
else if(BST->Data>X) {
BST=BST->Left;
} else
return BST;
}
return NULL;
}
}
Position FindMin( BinTree BST ) {
if(BST) {
while(BST->Left) {
BST=BST->Left;
}
}
return BST;
}
Position FindMax( BinTree BST ) {
if(BST) {
while(BST->Right) {
BST=BST->Right;
}
}
return BST;
}
BinTree Insert( BinTree BST, ElementType X ) {
if(!BST) {
BST=(BinTree)malloc(sizeof(struct TNode));
BST->Data=X;
BST->Left=BST->Right=NULL;
} else {
if(BST->Data>X) {
BST->Left=Insert(BST->Left,X);
} else if(BST->Data<X) {
BST->Right=Insert(BST->Right,X);
}
}
return BST;
}
BinTree Delete( BinTree BST, ElementType X ) {
if(!BST) {
printf("Not Found\n");
} else {
if(BST->Data>X) {
BST->Left=Delete(BST->Left,X);
} else if(BST->Data<X) {
BST->Right=Delete(BST->Right,X);
} else {
if(BST->Left&&BST->Right) {
BinTree tmp=FindMin(BST->Right);
BST->Data=tmp->Data;
BST->Right=Delete(BST->Right,tmp->Data);
free(tmp);
} else {
if(!BST->Left) {
BST=BST->Right;
} else if(!BST->Right) {
BST=BST->Left;
}
}
}
}
return BST;
}