• <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)  編輯 收藏 引用 所屬分類: 數據結構和算法分析
            国产精品免费看久久久香蕉| 亚洲欧美精品一区久久中文字幕| 久久精品中文字幕第23页| 97久久久久人妻精品专区| 亚洲va中文字幕无码久久| 精品久久久久久中文字幕大豆网| 婷婷久久精品国产| 国产精品久久久久一区二区三区 | 久久久久久久综合日本| 国产午夜精品理论片久久| 国产亚州精品女人久久久久久 | 久久精品一区二区三区不卡| 国产亚洲精品自在久久| 99久久这里只有精品| 国产精品99久久久久久宅男 | 精品久久久久久久久久久久久久久| 国产精品无码久久综合网| 久久性精品| 色狠狠久久AV五月综合| 国产精品毛片久久久久久久| 成人午夜精品久久久久久久小说| 久久中文字幕视频、最近更新| 久久国产欧美日韩精品免费| 国产aⅴ激情无码久久| 国产午夜久久影院| 亚洲精品99久久久久中文字幕| 国内精品综合久久久40p| 国产午夜精品理论片久久影视 | 7777久久久国产精品消防器材| 一本色道久久综合狠狠躁| 久久久久久久综合日本亚洲| 亚洲Av无码国产情品久久| 欧洲精品久久久av无码电影| 一级做a爱片久久毛片| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 国产女人aaa级久久久级| 亚洲av成人无码久久精品 | 久久久久国产日韩精品网站| 97久久国产综合精品女不卡 | 亚洲精品国产综合久久一线| 国产精品美女久久久m|