• <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>

             

            #include <iostream>

            using namespace std; 

            template
            <typename Type> 
            struct BTNode{
                Type elem;
                BTNode
            <Type>* lchild, *rchild;
                BTNode(){}
                BTNode( BTNode
            <Type>* l, BTNode<Type>* r, Type k ):
                    lchild(l), rchild(r), elem(k) {}
            };

            template
            <typename Type>
            class BSTree{
                
            private:
                    BTNode
            <Type>* root;    
                    BTNode
            <Type>* get_min( BTNode<Type>* );
                    BTNode
            <Type>* get_max( BTNode<Type>* );
                    BTNode
            <Type>* insert ( BTNode<Type>*, Type key );
                    BTNode
            <Type>* erase  ( BTNode<Type>*, Type key );
                    
            void          travel ( BTNode<Type>* root );
                    
            void          clear  ( BTNode<Type>* root );
                    
            bool          search ( BTNode<Type>*, Type key );
                
                
            public:
                    BSTree();
                    
            ~BSTree();
                    BTNode
            <Type>* get_min();
                    BTNode
            <Type>* get_max();
                    
            void          insert( Type key );
                    
            void          travel();
                    
            bool          is_empty();
                    
            void          clear();
                    
            void          erase( Type key );
                    
            bool          search( Type key );
            };

            template
            <typename Type>
            bool BSTree<Type>::search( BTNode<Type>* root, Type key ){
                
            if!root ) return false;
                
            if( root->elem== key ) return true;
                
                
            if( key< root->elem ) return search( root->lchild, key );
                
            else                  return search( root->rchild, key );
            }

            template
            <typename Type>
            bool BSTree<Type>::search( Type key ){
                
            return search( root, key ); }

            template
            <typename Type>
            BTNode
            <Type>* BSTree<Type>::erase( BTNode<Type>* root, Type key ){
                
            if( root->elem== key ){
                    
            if!root->lchild && !root->rchild ){
                        delete root;
                        
            return NULL; }
                    
            else if( root->lchild && !root->rchild ){
                        BTNode
            <Type>* tmp= root->lchild;
                        delete root; 
            return tmp; }
                    
            else {
                        BTNode
            <Type>* tmp= get_min( root->rchild );
                        root
            ->elem= tmp->elem;
                        root
            ->rchild= erase( root->rchild, tmp->elem );
                        
            return root; }
                }
                
            if( key< root->elem ) root->lchild= erase( root->lchild, key );
                
            else                  root->rchild= erase( root->rchild, key );
                
            return root;
            }

            template
            <typename Type>
            void BSTree<Type>::erase( Type key ){
                
            if!search( key ) ) return;
                root
            = erase( root, key );
            }

            template
            <typename Type>
            void BSTree<Type>::clear( BTNode<Type>* root ){
                
            if( root ){
                    clear( root
            ->lchild );
                    clear( root
            ->rchild );
                    delete root; }
            }

            template
            <typename Type>
            void BSTree<Type>::clear(){
                clear( root ); }

            template
            <typename Type>
            bool BSTree<Type>::is_empty(){
                
            return root== NULL; }

            template
            <typename Type>
            BSTree
            <Type>::BSTree(){ root= NULL; }

            template
            <typename Type>
            BSTree
            <Type>::~BSTree(){
                clear(); }

            template
            <typename Type>
            void BSTree<Type>::travel( BTNode<Type>* root ){
                
            if( root ){
                    travel( root
            ->lchild );
                    cout 
            << root->elem << endl;
                    travel( root
            ->rchild ); }
            }

            template
            <typename Type>
            void BSTree<Type>::travel(){
                BTNode
            <Type>* r= root;
                travel( r ); }

            template
            <typename Type>
            BTNode
            <Type>* BSTree<Type>::insert(BTNode<Type>* root,Type key){
                
            if( root== NULL )
                    
            return new BTNode<Type>( NULL, NULL, key );
                
            if( root->lchild== NULL && key< root->elem ){
                    root
            ->lchild= new BTNode<Type>( NULL, NULL, key );
                    
            return root; }
                
            else if( root->rchild== NULL && key> root->elem ){
                    root
            ->rchild= new BTNode<Type>( NULL, NULL, key );
                    
            return root; }
                
            if( root->elem> key ) root->lchild= insert( root->lchild, key );
                
            else                  root->rchild= insert( root->rchild, key );
                
            return root;
            }

            template
            <typename Type>
            void BSTree<Type>::insert( Type key ){
                root
            = insert( root, key ); }

            template
            <typename Type>
            BTNode
            <Type>* BSTree<Type>::get_min( BTNode<Type>* root ){
                
            if( root== NULL ) return NULL;
                
            while( root->lchild ) root= root->lchild;
                
            return root;}

            template
            <typename Type>
            BTNode
            <Type>* BSTree<Type>::get_min(){
                BTNode
            <Type>* r= root;
                
            return get_min( r );}

            template
            <typename Type>
            BTNode
            <Type>* BSTree<Type>::get_max( BTNode<Type>* root ){
                
            if( root== NULL ) return NULL;
                
            while( root->rchild ) root= root->rchild;
                
            return root;}

            template
            <typename Type>
            BTNode
            <Type>* BSTree<Type>::get_max(){
                BTNode
            <Type>* r= root;
                
            return get_max( r );}
                
            int main()
            {
                freopen( 
            "test.txt""w", stdout );
                BSTree
            <int>  test;
                
                
            forint i= 0; i< 100000++i )
                test.insert( rand() );
                
            forint i= 0; i< 100000++i )
                test.erase( rand() );
                
                test.travel();
                
                
            return 0;
            }
            posted on 2009-04-11 19:29 Darren 閱讀(1263) 評論(2)  編輯 收藏 引用

            評論:
            # re: Binary Search Tree c++ 模板實現 2010-10-24 15:34 | 周潤生
            在VC++里編程出現error的話。去掉main函數里第二個for循環的int可以解決。  回復  更多評論
              
            # re: Binary Search Tree c++ 模板實現 2010-12-17 00:23 | aba
            @周潤生
            這個是早期C++的一個遺留問題,在VC++6.0中可以用
            #define for if(false);else{for解決。  回復  更多評論
              
            日韩影院久久| 伊人久久综在合线亚洲2019| 人妻无码精品久久亚瑟影视| 日本强好片久久久久久AAA| 中文字幕无码久久精品青草| 久久久久无码精品国产不卡| 亚洲精品NV久久久久久久久久| 久久99国产精一区二区三区 | 国产亚州精品女人久久久久久 | 2021最新久久久视精品爱| 国产精品久久久久久久久| 久久国产免费观看精品3| 国产精品福利一区二区久久| 99久久国产精品免费一区二区| 久久久久久夜精品精品免费啦| 久久精品一区二区国产| 亚洲嫩草影院久久精品| 亚洲国产成人久久精品99| yy6080久久| 久久久精品国产亚洲成人满18免费网站| 女人高潮久久久叫人喷水| 久久精品国产亚洲av影院| 国产亚州精品女人久久久久久 | 色播久久人人爽人人爽人人片AV| 亚洲午夜无码久久久久| 国产美女久久久| 久久久免费精品re6| 久久久久久久亚洲精品| 久久亚洲春色中文字幕久久久| 亚洲一区中文字幕久久| 国内精品久久久久影院薰衣草 | 国产精品久久久久久久| 久久久久国产日韩精品网站| 久久精品国产99久久久香蕉| 99久久精品费精品国产| 2020国产成人久久精品| 91精品国产综合久久婷婷| 亚洲国产成人久久一区WWW| 亚洲国产精品久久| 久久综合九色综合久99| 久久精品无码专区免费青青|