题目位置
删除 很精髓
Position FindMax( BinTree BST ){
BinTree B = BST;
BinTree T;
while(B){
T = B;
B = B->Right;
}
return T;
}
Position FindMin( BinTree BST ){
BinTree B = BST;
BinTree T;
while(B){
T = B;
B = B->Left;
}
return T;
}
Position Find( BinTree BST, ElementType X ){
BinTree T = BST;
while(1){
if(T==NULL){return NULL;}
if(T->Data==X){return T;}
if(T->Data<X){
T= T->Right;
}else if(T->Data>X){
T= T->Left;
}
}
}
BinTree Delete( BinTree BST, ElementType X ){
if(!BST){
printf("Not Found\n");
}
else if(BST->Data<X){
BST->Right = Delete(BST->Right,X);
}else if(BST->Data>X){
BST->Left = Delete(BST->Left,X);
}else{
BinTree Tem = BST;
if(BST->Left&&BST->Right){
Tem = FindMin(BST->Right);
BST->Data = Tem->Data;
BST->Right = Delete(BST->Right,Tem->Data);
}
else{
if(BST->Left)
Tem = BST->Left;
else Tem = BST->Right;
free(BST);
return Tem;
}
}
return BST;
}
BinTree Insert( BinTree BST, ElementType X ){
if(!BST){
BinTree T = (BinTree)malloc(sizeof(struct TNode));
T->Left = NULL;
T->Right = NULL;
T->Data = X;
return T;
}
else if(BST->Data<X){
BST->Right = Insert(BST->Right,X);
}else if(BST->Data>X){
BST->Left = Insert(BST->Left,X);
}
return BST;
}