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

            The Fourth Dimension Space

            枯葉北風(fēng)寒,忽然年以殘,念往昔,語(yǔ)默心酸。二十光陰無(wú)一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢(mèng)令

            排序二叉樹(shù)模板(轉(zhuǎn))

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


            /**////////////////////////A_CLASS_TEMPLATE_FOR_BST//////////////////////////////
            template< class NODETYPE > class Tree;

            template< class NODETYPE >
            class TreeNode
            {
                friend class Tree< NODETYPE >;
            public:
                TreeNode( const NODETYPE &d ):leftPtr( 0 ), data( d ), rightPtr( 0 ){ }
                NODETYPE getData() const 
                {
                    return data; 
                }
            private:
                TreeNode< NODETYPE > *leftPtr;
                NODETYPE data;
                TreeNode< NODETYPE > *rightPtr;
            };



            template< class NODETYPE >
            class Tree{
            public:
               Tree();
               void insertNode( const NODETYPE & );
               void preOrderTraversal() const;
               void inOrderTraversal() const;
               void postOrderTraversal() const;
            private:
               TreeNode< NODETYPE > *rootPtr;

               void insertNodeHelper(
                TreeNode< NODETYPE > **, const NODETYPE & );
               void preOrderHelper( TreeNode< NODETYPE > * ) const;
               void inOrderHelper( TreeNode< NODETYPE > * ) const;
               void postOrderHelper( TreeNode< NODETYPE > * ) const;
            };

            template< class NODETYPE >
            Tree< NODETYPE >::Tree() { rootPtr = 0; }

            template< class NODETYPE >
            void Tree< NODETYPE >::insertNode( const NODETYPE &value )
            {
            insertNodeHelper( &rootPtr, value );
            }

            template< class NODETYPE >
            void Tree< NODETYPE >::insertNodeHelper(TreeNode< NODETYPE > **ptr, const NODETYPE &value )
            {
                if( *ptr == 0 )
                {
                   *ptr = new TreeNode< NODETYPE >( value );
                   assert( *ptr != 0 );
                }
            else
               if( value < ( *ptr )->data )
                   insertNodeHelper( &( ( *ptr )->leftPtr ), value );
               else
                   if( value > ( *ptr )->data )
                       insertNodeHelper( &( ( *ptr )->rightPtr ), value );
               else
                 cout<< value << " dup" << endl;


            template< class NODETYPE >
            void Tree< NODETYPE >::preOrderTraversal() const
            {
                preOrderHelper( rootPtr ); 
            }

            template< class NODETYPE >
            void Tree< NODETYPE >::preOrderHelper(TreeNode< NODETYPE > *ptr ) const
            {
                if( ptr != 0 )
                {
                   cout<< ptr->data << ' ';
                   preOrderHelper( ptr->leftPtr );
                   preOrderHelper( ptr->rightPtr );
                }
            }

            template< class NODETYPE >
            void Tree< NODETYPE >::inOrderTraversal() const

                inOrderHelper( rootPtr );
            }

            template< class NODETYPE >
            void Tree< NODETYPE >::inOrderHelper( TreeNode< NODETYPE > *ptr ) const
            {
            if( ptr != 0 )
                {
                   inOrderHelper( ptr->leftPtr );
                   cout<< ptr->data << ' ';
                   inOrderHelper( ptr->rightPtr );
                }
            }

            template< class NODETYPE >
            void Tree<NODETYPE >::postOrderTraversal() const
            {
                postOrderHelper( rootPtr );
            }

            template< class NODETYPE >
            void Tree< NODETYPE >::postOrderHelper(    TreeNode< NODETYPE > *ptr ) const
            {
                if( ptr != 0 )
                {
                   postOrderHelper( ptr->leftPtr );
                   postOrderHelper( ptr->rightPtr );
                   cout<< ptr->data << ' ';  
                }
            }
            /**///////////////////////////////END_TEMPLATE/////////////////////////////////

            int main()
            {
                Tree< int > intTree;
                int intVal;
                
                cout<< "Enter 10 integer values:\n";
                for( int i = 0; i < 10; i++ )
                {
                    cin>> intVal;
                    intTree.insertNode( intVal );
                }
                
                cout<< "\nPreorder traversal\n";
                intTree.preOrderTraversal();
                
                cout<< "\nInorder traversal\n";
                intTree.inOrderTraversal();
                
                cout<< "\nPostorder traversal\n";
                intTree.postOrderTraversal();
                
                return 0;
            }

            網(wǎng)上看到的模板,感覺(jué)寫(xiě)得很不錯(cuò),呵呵。不過(guò)排序二叉樹(shù)本來(lái)是用來(lái)查找的,沒(méi)有查找函數(shù)真是可惜了丫,等下次有時(shí)間我來(lái)加個(gè)查找刪除函數(shù),這個(gè)模板就可以真正的使用了。


            PS:其實(shí)學(xué)完數(shù)據(jù)結(jié)構(gòu)以后我自己也寫(xiě)了一個(gè)排序二叉樹(shù)的模板,可惜的是,由于新建結(jié)點(diǎn)里面有指針,似乎無(wú)法用上模板類了,今天看了這個(gè)模板才恍然大悟,原來(lái)可以寫(xiě)一個(gè)結(jié)點(diǎn)類,呵呵;我還有一個(gè)地方不太明白,就是friend class Tree< NODETYPE >;這條語(yǔ)句里面用到了friend關(guān)鍵字,我以前只學(xué)過(guò)友元函數(shù),難道還有友元類么?希望知道的朋友能給我解釋一下。如果能告訴我相關(guān)的知識(shí)點(diǎn)的出處,讓我自己去學(xué)習(xí)一下就更好了,謝謝呵   :-)

            posted on 2009-05-24 02:10 abilitytao 閱讀(1043) 評(píng)論(1)  編輯 收藏 引用

            評(píng)論

            # re: 排序二叉樹(shù)模板(轉(zhuǎn)) 2009-05-24 15:13 longe

            一個(gè)類A中定義一個(gè)友元類B的話,B成員是可以訪問(wèn)A成員的,包括private .這個(gè)在c++primer 三版 里有講過(guò)的。  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            精品久久久久久中文字幕大豆网| 久久久久久久97| 狠狠干狠狠久久| 欧美麻豆久久久久久中文| 久久人妻无码中文字幕| 国产精品美女久久久久| 久久精品国产亚洲Aⅴ香蕉| 国产高潮久久免费观看| 色偷偷91久久综合噜噜噜噜| 伊人久久大香线蕉av一区| 国产成人精品久久二区二区| 欧美久久综合九色综合| 青青草原综合久久| 久久久www免费人成精品| 99精品伊人久久久大香线蕉| 人妻久久久一区二区三区| 久久综合伊人77777| 久久99国产精品尤物| 久久精品国产亚洲αv忘忧草 | 色欲综合久久躁天天躁蜜桃| 久久人人爽人人爽人人片AV不| 国产福利电影一区二区三区,免费久久久久久久精 | 久久久久综合中文字幕| 久久久亚洲欧洲日产国码aⅴ| 国产精品成人99久久久久 | 精品熟女少妇av免费久久| 99久久国产综合精品成人影院| 亚洲综合精品香蕉久久网| 国产亚洲婷婷香蕉久久精品| 久久精品极品盛宴观看| 久久综合久久鬼色| 久久精品亚洲精品国产欧美| 天天久久狠狠色综合| 国产一久久香蕉国产线看观看| 色婷婷综合久久久中文字幕| 99久久国产亚洲综合精品| 人人狠狠综合久久亚洲| 国产精品99久久久久久猫咪| 一本久久a久久精品综合夜夜 | 精品国产一区二区三区久久久狼 | 国产精品毛片久久久久久久|