• <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  評(píng)論-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);
            };
            //先序遍歷二叉樹(shù)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;
            }
            //中序遍歷二叉樹(shù)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;
            }
            //二叉排序樹(shù)上的查找遞歸算法
            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;
            }
            //在二叉樹(shù)中刪除一個(gè)結(jié)點(diǎn)
            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;
             }
            }
            //二叉排序樹(shù)的刪除
            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;
            }
            //輸出二叉排序樹(shù)的數(shù)據(jù)地域值
            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<<"..............................二叉排序樹(shù)的基本操作.............................."<<endl;
             cout<<"請(qǐng)您輸入十個(gè)正整數(shù)作為二叉排序樹(shù)的十個(gè)結(jié)點(diǎn):"<<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<<"二叉排序樹(shù)創(chuàng)建成功!"<<endl;
                cout<<"先序遍歷二叉排序樹(shù):"<<endl;
             my.PreOrderTraverse(sroot,printelem);
             cout<<endl;
             cout<<"中序遍歷二叉排序樹(shù):"<<endl;
             my.InOrderTraverse(sroot,printelem);
             cout<<endl;
                cout<<"請(qǐng)輸入你要查找的元素:";
             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<<"請(qǐng)輸入你要?jiǎng)h除的元素(...輸入的元素必須在二叉排序樹(shù)中...):";
             cin>>j;
             my.DeleteBST(&sroot,j);
             cout<<"先序遍歷二叉排序樹(shù):"<<endl;
             my.PreOrderTraverse(sroot,printelem);
             cout<<endl;
             cout<<"中序遍歷二叉排序樹(shù):"<<endl;
                my.InOrderTraverse(sroot,printelem);
             cout<<endl;
                cout<<"在此基礎(chǔ)上請(qǐng)輸入你要插入的元素:";
             cin>>k;
             my.InsertBST(&sroot,k);
                cout<<"先序遍歷二叉排序樹(shù):"<<endl;
             my.PreOrderTraverse(sroot,printelem);
             cout<<endl;
             cout<<"中序遍歷二叉排序樹(shù):"<<endl;
                my.InOrderTraverse(sroot,printelem);
             cout<<endl;
            }

            posted on 2009-11-15 11:54 deercoder 閱讀(1590) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)和算法分析
            狠狠色丁香婷婷久久综合五月| 九九精品99久久久香蕉| 欧美激情精品久久久久久久| 国产精品成人99久久久久| 国产精品久久久久久久久久影院| 久久亚洲精品中文字幕| 久久99精品久久久久久噜噜| 亚洲av成人无码久久精品| 国产午夜精品理论片久久| 无码伊人66久久大杳蕉网站谷歌| 久久国产V一级毛多内射| 精品久久久久久久无码| 亚洲日本va午夜中文字幕久久| 久久香综合精品久久伊人| 久久婷婷色香五月综合激情| 热久久这里只有精品| 久久人人爽人人爽人人片AV不| 伊人精品久久久久7777| 国产成人综合久久精品尤物| 精品久久久久香蕉网| 久久夜色精品国产噜噜麻豆| 久久国语露脸国产精品电影| 中文字幕亚洲综合久久菠萝蜜| 久久99精品九九九久久婷婷| 99久久精品费精品国产| 97超级碰碰碰碰久久久久| 九九精品99久久久香蕉| 国产V综合V亚洲欧美久久| 中文精品久久久久人妻不卡| 精品久久久久久国产| 丁香色欲久久久久久综合网| 青青草原综合久久大伊人| 亚洲伊人久久成综合人影院| 欧美久久久久久| 看久久久久久a级毛片| 久久天天躁狠狠躁夜夜网站 | 欧美精品丝袜久久久中文字幕 | 亚洲精品乱码久久久久66| 久久香蕉国产线看观看精品yw| 亚洲va中文字幕无码久久不卡| 久久婷婷五月综合97色一本一本|