递归查找
Position Find( BinTree BST,ElementType X){
if(!BST)
return NULL;
if(X>BST->Data)
return Find( BST->Right, X);
else if(X<BST->Data)
return Find ( BST->Left, X);
else
return BST;
}
迭代查找
Position Finde (BinTree BST,ElementType X){
while(BST){
if(BST->Data > X)
BST=BST->Right;
else if(BST->Data < X)
BST=BST->Left;
else
break;
}
return BST;
}
查找最小元素(递归)
Position FindMin( BinTree BST ){
if(!BST) return NULL;
else if(!BST->Left) return BST;
else return FindMin(BST->Left);
}
查找最大元素(递归)
Position FindMax(BinTree BST){
if(!BST) return NULL;
else if(!BST->Right) return BST;
else return FindMax(BST->Right);
}
查找最小元素(迭代)
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(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){
Position Tmp;
if(!BST)
printf("要删除的元素未找到");
else{
if(X < BST->Data)
BST->Left=Delete(BST->Left,X);
else if(X > BST->Data)
BST->Right=Delete(BST->Right,X):
else{
if(BST->Left && BST->Right){
Tmp= FindMin(BST->Right);
BST->Data=Tmp->Data;
BST->Right=Delete(BST->Right,BST-Data);
}
else{
Tmp=BST;
if(!BST->Left)
BST=BST->Right;
else
BST=BST->Left;
free(Tmp);
}
}
}
return BST;
}