二叉树的相关操作集
#include<iostream>
using namespace std;
typedef int ElementType;
typedef struct TNode* Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left,Right;
};
Position Find(BinTree BST,ElementType X);
Position MinFind(BinTree BST);
Position MaxFind(BinTree BST);
BinTree Insert(ElementType X,BinTree BST);
BinTree Delete(ElementType X,BinTree BST);
int main(){
BinTree T=(BinTree)malloc(sizeof(TNode)),tmp;
tmp=T;
for(int j=0;j<10;j++){
tmp=Insert(j,tmp);
}
while(tmp){
cout<<tmp->Data<<endl;
tmp=tmp->Right;
}
return 0;
}
Position Find(BinTree BST,ElementType X){
BinTree T=BST;
if(!T){
printf("空树,查找失败");
return NULL;
}else{
while(T){
if(T->Data>X)
T=T->Left;
else if(T->Data<X)
T=T->Right;
else return T;
}
return NULL;
}
}
Position MinFind(BinTree BST){
BinTree T=BST;
if(!T){
printf("空树,查找失败");
return NULL;
}else{
while(T->Left){
T=T->Left;
}
return T;
}
}
Position MaxFind(BinTree BST){
BinTree T=BST;
if(!T){
printf("空树,查找失败");
return NULL;
}else{
if(T->Right)
return MaxFind(T->Right);
else
return T;
}
}
BinTree Insert(ElementType X,BinTree BST){
if(!BST){
BST=(BinTree)malloc(sizeof(TNode));
BST->Data=X;
BST->Left=NULL;
BST->Right=NULL;
}else{
if(BST->Data>X){
BST->Left=Insert(X,BST->Left);
}else if(BST->Data<X){
BST->Right=Insert(X,BST->Right);
}
}
return BST;
}
BinTree Delete(ElementType X,BinTree BST){
Position tmp;
if(!BST){
printf("空树,删除失败!");
}else{
if(BST->Data>X)
BST->Left=Delete(X,BST->Left);
else if(BST->Data<X){
BST->Right=Delete(X,BST->Right);
}else{
if(BST->Left&&BST->Right){
tmp=MinFind(BST->Right);
BST->Data=tmp->Data;
BST->Right=Delete(BST->Data,BST->Right);
}else{
tmp=BST;
if(!BST->Left)
BST=BST->Right;
else if(!BST->Right)
BST=BST->Left;
free(tmp);
}
}
}
return BST;
}