• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-145  評論-173  文章-70  trackbacks-0

            #include <iostream>
            #include <iomanip>
            using namespace std;

            typedef struct BinaryTree
            {
             int data;
             struct BinaryTree *l;
             struct BinaryTree *r;
            }*BiTree,BiNode;
             
            class BiSearchT
            {
            private:
             BiTree root;
            public:
             BiSearchT() :root(NULL) {}
             int PreOrderTraverse(BiTree t,int (*Visit)(int e));
             int InOrderTraverse(BiTree t,int (*Visit)(int e));
             int InsertBST(BiTree *t,int e);
             void Delete(BiTree *p);
             bool DeleteBST(BiTree *t,int key);
             bool SearchBST(BiTree t,int key,BiTree f,BiTree *p);
            };
            //先序遍歷二叉樹T
            int BiSearchT::PreOrderTraverse(BiTree t,int (*Visit)(int d))
            {
             if(t)
             {
              if(Visit(t->data))
               if(PreOrderTraverse(t->l,Visit))
                if(PreOrderTraverse(t->r,Visit)) return 1;
                return 0;
                }else return 1;
            }
            //中序遍歷二叉樹T
            int BiSearchT::InOrderTraverse(BiTree t,int (*Visit)(int d))
            {
             if(t)
             {
              if(InOrderTraverse(t->l,Visit))
               if(Visit(t->data))
                if(InOrderTraverse(t->r,Visit)) return 1;
                return 0;
                }else return 1;
            }
            //二叉排序樹上的查找遞歸算法
            bool BiSearchT::SearchBST(BiTree t,int key,BiTree f,BiTree *p)
            {
             if(!t)
              {*p=f;return false;}
              else if(key==t->data) {*p=t;return true;}
              else if(key<t->data) SearchBST(t->l,key,t,p);
              else SearchBST(t->r,key,t,p);
            }
            //插入算法
            int BiSearchT::InsertBST(BiTree *t,int e)
            {
             BiTree p;
             BiTree s;
             if(!SearchBST(*t,e,NULL,&p))
             {
              s=(BiTree)malloc(sizeof(BiNode));
              s->data=e;s->l=s->r=NULL;
              if(!p) *t=s;
              else if(e<p->data) p->l=s;
              else p->r=s;
              return true;
             }
             else return false;
            }
            //在二叉樹中刪除一個結點
            void BiSearchT::Delete(BiTree *p)
            {
             BiTree q,s;
             if(!(*p)->r)
             {
              q=(*p);
              (*p)=(*p)->l;
              free(q);
             }
             else if(!(*p)->l)
             {
              q=(*p);
              (*p)=(*p)->r;
              free(q);
             }
             else
             {
              q=s=(*p)->l;
              while(s->r) s=s->r;
              s->r=(*p)->r;
              free(*p);
              (*p)=q;
             }
            }
            //二叉排序樹的刪除
            bool BiSearchT::DeleteBST(BiTree *t,int key)
            {
             if(*t!=NULL)
             {
              if(key==(*t)->data) Delete(t);
              else
               if(key<(*t)->data) DeleteBST(&((*t)->l),key);
               else DeleteBST(&((*t)->r),key);
               return true;
             }
               else return false;
            }
            //輸出二叉排序樹的數據地域值
            int printelem(int d)
            {
             cout<<setw(4)<<d;
             return 1;
            }

            void main()
            {
             BiTree sroot=NULL;
             BiTree Croot=NULL;
             int q,c,d,e,f,g,h,l,m,x;
             cout<<"..............................二叉排序樹的基本操作.............................."<<endl;
             cout<<"請您輸入十個正整數作為二叉排序樹的十個結點:"<<endl;
             cin>>q>>c>>d>>e>>f>>g>>h>>l>>m>>x;
             int i,j,k,a[10]={q,c,d,e,f,g,h,l,m,x};
             int n=7,b[]={10,7,6,9,20,12,22};
             BiSearchT my;
             for(i=0;i<10;i++)
              my.InsertBST(&sroot,a[i]);
             cout<<"二叉排序樹創建成功!"<<endl;
                cout<<"先序遍歷二叉排序樹:"<<endl;
             my.PreOrderTraverse(sroot,printelem);
             cout<<endl;
             cout<<"中序遍歷二叉排序樹:"<<endl;
             my.InOrderTraverse(sroot,printelem);
             cout<<endl;
                cout<<"請輸入你要查找的元素:";
             cin>>i;
             if(i==q||i==c||i==d||i==e||i==f||i==g||i==h||i==l||i==m||i==x)
              cout<<"查找成功!"<<endl;
             else cout<<"查找失敗!"<<endl;
             cout<<"請輸入你要刪除的元素(...輸入的元素必須在二叉排序樹中...):";
             cin>>j;
             my.DeleteBST(&sroot,j);
             cout<<"先序遍歷二叉排序樹:"<<endl;
             my.PreOrderTraverse(sroot,printelem);
             cout<<endl;
             cout<<"中序遍歷二叉排序樹:"<<endl;
                my.InOrderTraverse(sroot,printelem);
             cout<<endl;
                cout<<"在此基礎上請輸入你要插入的元素:";
             cin>>k;
             my.InsertBST(&sroot,k);
                cout<<"先序遍歷二叉排序樹:"<<endl;
             my.PreOrderTraverse(sroot,printelem);
             cout<<endl;
             cout<<"中序遍歷二叉排序樹:"<<endl;
                my.InOrderTraverse(sroot,printelem);
             cout<<endl;
            }

            posted on 2009-11-15 11:54 deercoder 閱讀(1578) 評論(0)  編輯 收藏 引用 所屬分類: 數據結構和算法分析
            麻豆精品久久久久久久99蜜桃| 久久久精品国产免大香伊| 国内精品人妻无码久久久影院| 久久婷婷五月综合成人D啪| 日韩人妻无码精品久久久不卡| 久久精品人人槡人妻人人玩AV | .精品久久久麻豆国产精品| 久久精品九九亚洲精品| 久久精品国产精品亚洲下载| 亚洲av成人无码久久精品| 久久香蕉一级毛片| av色综合久久天堂av色综合在| 久久99精品国产99久久6男男| 久久亚洲精品无码播放| 国产产无码乱码精品久久鸭| 亚洲?V乱码久久精品蜜桃| 97热久久免费频精品99| 婷婷国产天堂久久综合五月| 国产成人久久久精品二区三区| 久久婷婷国产剧情内射白浆| 久久99国产一区二区三区| 精品久久久久久国产潘金莲| 久久精品国产99久久久古代| 久久久久亚洲AV成人网| 久久99热国产这有精品| 国产精品美女久久久m| 久久婷婷五月综合成人D啪| 欧美大战日韩91综合一区婷婷久久青草| 久久久久久久久无码精品亚洲日韩 | MM131亚洲国产美女久久| 人妻无码精品久久亚瑟影视| 久久久久亚洲AV成人网| 久久久精品日本一区二区三区 | 久久久久人妻一区精品| 国产精品亚洲综合专区片高清久久久| 久久精品毛片免费观看| 高清免费久久午夜精品| 久久99精品久久久久子伦| 久久精品人成免费| 青草影院天堂男人久久| 91久久成人免费|