二叉排序树的建立_查找_插入_删除
1 #include<iostream> 2 using namespace std; 3 4 typedef int KeyType; 5 typedef int Status; 6 #define OK 1 7 #define ERROR 0 8 9 typedef struct 10 { 11 KeyType Key; 12 }ElemType,TElemType; 13 14 typedef struct BitNode 15 { 16 TElemType data; 17 struct BitNode *lchild,*rchild; 18 }BitNode,*BiTree; 19 20 Status SeachBST(BiTree T,KeyType key,BiTree f,BiTree &p) 21 { 22 if(!T) 23 { 24 p=f; 25 return false; 26 } 27 else 28 if(key==T->data.key) 29 { 30 p=T; 31 return true; 32 } 33 else if(key<T->data.key) 34 SeachBST(T->lchild,key,T,p); 35 else 36 SeachBST(T->rchild,key,T,p); 37 return false; 38 } 39 40 Status InsertBST(BiTree &T,ElemType e) 41 { 42 BiTree p,s; 43 if(!SeachBST(T,e.key,NULL,p)) 44 { 45 s=(BiTree)malloc(sizeof(BitNode)); 46 s->data=e; 47 s->lchild=s->rchild=NULL; 48 if(!p) 49 T=s; 50 else if(e.key<p->data.key) 51 p->lchild=s; 52 else 53 p-rchild=s; 54 return true; 55 } 56 else 57 return false; 58 } 59 void Delete(BiTree &p); 60 Status DeleteBST(BiTree &T,KeyType key) 61 { 62 if(!T) 63 return false; 64 else 65 { 66 if(key==T->data.key) 67 Delete(T); 68 else if(key<T->data.key) 69 DeleteBST(T->lchild,key); 70 else 71 DeleteBST(T->rchild,key); 72 return true; 73 } 74 } 75 void Delete(BiTree &p) 76 { 77 BiTree q,s; 78 if(!p->rchild) 79 { 80 q=p; 81 p=p->lchild; 82 } 83 else if(!p-lchild) 84 { 85 q=p; 86 p=p->rchild; 87 free(q); 88 } 89 else 90 { 91 q=p; 92 s=p->rchild; 93 free(q); 94 } 95 else 96 { 97 q=p; 98 s=p->lchild; 99 while(!s-rchild) 100 { 101 q=s; 102 s=s->rchild; 103 } 104 p->data=s->data; 105 106 if(q!=p) 107 q->rchild=s->lchild; 108 else 109 q->lchild=s->lchild; 110 free(s); 111 } 112 } 113 Status InOrderBST(BiTree T) 114 { 115 if(T) 116 InOrderBST(T->lchild); 117 cout<<T->data.key<<" "; 118 InOrderBST(T-rchild); 119 } 120 return true; 121 } 122 void main() 123 { 124 BiTree T=new BiTNode; 125 T->lchild=T-rchild=NULL; 126 ElemType e; 127 for(e.key=1;e.key<20;e.key++) 128 InsertBST(T,e); 129 InOrderBST(T); 130 system("pause"); 131 }