二叉搜索树的操作集

二叉搜索树的操作集

 

 

 

 

 

 

 

 总代码:

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 
  4 
  5 typedef int ElementType;
  6 typedef struct TNode *Position;
  7 typedef Position BinTree;
  8 struct TNode{
  9     ElementType Data;
 10     BinTree Left;
 11     BinTree Right;
 12 };
 13 
 14 void PreorderTraversal( BinTree BT );
 15 void InorderTraversal( BinTree BT );
 16 void PostorderTraversal( BinTree BT );
 17 
 18 BinTree Insert( BinTree BST, ElementType X );
 19 BinTree Delete( BinTree BST, ElementType X );
 20 Position Find( BinTree BST, ElementType X );
 21 Position FindMin( BinTree BST );
 22 Position FindMax( BinTree BST );
 23 
 24 int main()
 25 {
 26     BinTree BST, MinP, MaxP, Tmp;
 27     ElementType X;
 28     int N,i;
 29 
 30     BST = NULL;
 31     scanf("%d",&N);
 32     for(int i=0;i<N;i++){
 33         scanf("%d",&X);
 34         BST = Insert(BST,X);
 35     }
 36     printf("Preorder: "); PreorderTraversal(BST); printf("\n");
 37     MinP = FindMin(BST);
 38     MaxP = FindMax(BST);
 39     scanf("%d",&N);
 40     for(int i=0;i<N;i++){
 41         scanf("%d",&X);
 42         Tmp = Find(BST,X);
 43         if( Tmp==NULL ) printf("%d is not found\n",X);
 44         else{
 45             printf("%d is found\n",Tmp->Data);
 46             if( Tmp==MinP ) printf("%d is the smallest key\n", Tmp->Data);
 47             if( Tmp==MaxP ) printf("%d is the largest key\n", Tmp->Data);
 48         }
 49     }
 50     scanf("%d",&N);
 51     for(int i=0;i<N;i++){
 52         scanf("%d",&X);
 53         BST = Delete(BST,X);
 54     }
 55     printf("Inorder:"); InorderTraversal(BST); printf("\n");
 56 }
 57 
 58 BinTree Insert(BinTree BST, ElementType X){
 59     if( !BST ){
 60         BST = (BinTree)malloc(sizeof(struct TNode));
 61         BST -> Data = X;
 62         BST -> Left = BST -> Right = NULL;
 63     }
 64     else{
 65         if( X<BST->Data ){
 66             BST -> Left = Insert(BST->Left, X);
 67         }else if( X>=BST->Data ){
 68             BST -> Right = Insert(BST->Right,X);
 69         }
 70     }
 71     return BST;
 72 }
 73 
 74 BinTree Delete(BinTree BST, ElementType X){
 75     Position Temp;
 76     if( !BST ) printf("Not Found\n");
 77     else if( X>BST->Data ) BST->Right = Delete(BST->Right,X);
 78     else if( X<BST->Data ) BST->Left = Delete(BST->Left,X);
 79     else{
 80         if( BST->Left && BST->Right ){
 81             Temp = FindMax(BST->Left);
 82             BST->Data = Temp->Data;
 83             BST->Left = Delete(BST->Left,BST->Data);
 84         }else{
 85             Temp = BST;
 86             if( !BST->Left ) BST = BST->Right;
 87             else BST = BST->Left;
 88             free(Temp);
 89         }
 90     }
 91     return BST;
 92 }
 93 
 94 void PreorderTraversal(BinTree BST){
 95     if( BST ){
 96         printf("%d ",BST->Data);
 97         PreorderTraversal(BST->Left);
 98         PreorderTraversal(BST->Right);
 99     }
100 }
101 
102 void InorderTraversal(BinTree BST){
103     if( BST ){
104         InorderTraversal(BST->Left);
105         printf("%d ",BST->Data);
106         InorderTraversal(BST->Right);
107     }
108 }
109 
110 Position FindMin(BinTree BST){
111     if( !BST ) return NULL;
112     else if( !BST->Left ) return BST;
113     else return FindMin(BST->Left);
114 }
115 
116 Position FindMax(BinTree BST){
117     if( !BST ) return NULL;
118     else if( !BST->Right ) return BST;
119     else return FindMax(BST->Right);
120 }
121 
122 Position Find(BinTree BST, ElementType X){
123     if( !BST ) return NULL;
124     else if( BST->Data==X ) return BST;
125     else{
126         if( X>BST->Data ) return Find(BST->Right,X);
127         else if( X<BST->Data ) return Find(BST->Left,X);
128     }
129 }

 

posted @ 2020-11-27 11:53  swsyya  阅读(82)  评论(0编辑  收藏  举报

回到顶部