二叉排序树源代码

来源:互联网 发布:埃及叙利亚合并知乎 编辑:程序博客网 时间:2024/06/05 11:22

二叉排序树源代码

分类: 数据结构与算法2013-06-21 10:43 157人阅读 评论(0) 收藏 举报
[cpp] viewplaincopyprint?
  1. #include"iostream"  
  2. using namespace std;  
  3.   
  4. struct BiTNode   
  5.  
  6.     int data;  
  7.     struct BiTNode *lchild,*rchild;  
  8. };  
  9. typedef struct BiTNode BiTNode,*biTree;  
  10.   
  11.   
  12. biTree SearchBST(biTree T,int key)  
  13.  
  14.     //在根指针T所指的二叉排序树中递归地查找某关键字等于key的数据元素  
  15.     //若查找成功,则返回指向数据元素节点的指针,否则,返回空指针  
  16.     if (T==NULL)  
  17.      
  18.         return NULL;  
  19.      
  20.     else  
  21.      
  22.         if (key==T->data)  
  23.          
  24.             return T;  
  25.          
  26.         else if (key<T->data)  
  27.          
  28.             return (SearchBST(T->lchild,key));  
  29.          
  30.         else  
  31.          
  32.             return(SearchBST(T->rchild,key));  
  33.          
  34.      
  35.   
  36.  
  37.   
  38.   
  39. void  InsertBST (biTree &T int key)  
  40.     
  41.   
  42.       
  43.     if (T==NULL)  
  44.      
  45.         biTree x;  
  46.         x=new BiTNode;  
  47.         x->data=key;  
  48.         x->lchild=x->rchild=NULL;  
  49.         T=x;  
  50.         cout<<"插入成功\n" 
  51.      
  52.     else  
  53.      
  54.         if (T->data==key)  
  55.          
  56.             cout<<"节点已存在\n"<<endl;  
  57.          
  58.         else if (key<T->data)  
  59.          
  60.             InsertBST(T->lchild,key);  
  61.          
  62.         else  
  63.                 
  64.             InsertBST(T->rchild,key);  
  65.          
  66.      
  67.       
  68.  
  69.   
  70. biTree CreateTree()  
  71.  
  72.     biTree T=NULL;  
  73.     int num=0;  
  74.     cout<<"请输入一次插入的值:" 
  75.     cin>>num;  
  76.     while (num!=-1)  
  77.      
  78.         InsertBST(T,num);  
  79.         cout<<"下一个插入的值(-1结束):" 
  80.         cin>>num;  
  81.      
  82.     cout<<"二叉树建立完成\n" 
  83.     return T;  
  84.  
  85.   
  86. int dele(biTree &p)  
  87.  
  88.     biTree q,s;  
  89.     if (p->lchild==NULL)  
  90.      
  91.         q=p;  
  92.         p=p->lchild;  
  93.         delete q;  
  94.      
  95.     else if (p->rchild==NULL)  
  96.      
  97.         q=p;  
  98.         p=p->rchild;  
  99.         delete q;  
  100.      
  101.     else  
  102.      
  103.         q=p;  
  104.         s=p->lchild;  
  105.         while(s->rchild)  
  106.          
  107.             q=s;  
  108.             s=s->rchild;  
  109.          
  110.         p->data=s->data;  
  111.         if (q!=p)  
  112.          
  113.             q->rchild=s->lchild;  
  114.          
  115.         else  
  116.          
  117.             q->lchild=s->lchild;  
  118.          
  119.         delete s;  
  120.   
  121.      
  122.     return 1;  
  123.       
  124.  
  125. int deleteBTree(biTree &T,int num)  
  126.  
  127.     if (T==NULL)  
  128.      
  129.         return 0;  
  130.      
  131.     else  
  132.      
  133.         if (num==T->data)  
  134.          
  135.             return dele(T);  
  136.          
  137.         else if (num<T->data)  
  138.          
  139.             return deleteBTree(T->lchild,num);  
  140.          
  141.         else  
  142.          
  143.             return deleteBTree(T->rchild,num);  
  144.          
  145.           
  146.      
  147.  
  148. void middVisit(biTree T)  
  149.  
  150.     if (T==NULL)  
  151.      
  152.          
  153.      
  154.     else  
  155.      
  156.         middVisit(T->lchild);  
  157.         cout<<T->data<<  " 
  158.         middVisit(T->rchild);  
  159.      
  160.   
  161.  
  162. void firstVisit(biTree T)  
  163.  
  164.     if (T==NULL)  
  165.      
  166.          
  167.      
  168.     else  
  169.      
  170.         cout<<T->data<<  " 
  171.         firstVisit(T->lchild);  
  172.         firstVisit(T->rchild);  
  173.      
  174.  
  175. void lastVisit(biTree T)  
  176.  
  177.     if (T==NULL)  
  178.      
  179.          
  180.      
  181.     else  
  182.      
  183.       
  184.         lastVisit(T->lchild);  
  185.         lastVisit(T->rchild);  
  186.         cout<<T->data<<  " 
  187.      
  188.  
  189. int main()  
  190.  
  191.     biTree T=CreateTree();  
  192.     cout<<"中序遍历结果:\n" 
  193.     middVisit(T);  
  194.     cout<<endl;  
  195.     cout<<"前序遍历结果:\n" 
  196.     firstVisit(T);  
  197.     cout<<endl;  
  198.     cout<<"后序遍历结果:\n" 
  199.     lastVisit(T);  
  200.     cout<<endl;  
  201.   
  202.     deleteBTree(T,7);  
  203.     cout<<"中序遍历结果:\n" 
  204.     middVisit(T);  
  205.     cout<<endl;  
  206.     return 0;  
  207. }  
 
0 0