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

            jake1036

            面試100 -11二叉樹鏡像

                   求二叉樹的鏡像

            1 該問題實(shí)質(zhì)上是將二叉樹的左右兩子樹,進(jìn)行交換。
                求查找樹的映像
               即是將原來標(biāo)準(zhǔn)的二叉樹,翻轉(zhuǎn)180度 。
               實(shí)現(xiàn)方法:
              方法(1)
               首先前序遍歷,標(biāo)準(zhǔn)二茶樹,然后將每一個(gè)節(jié)點(diǎn),按照逆查找樹,插入到鏡像中
              方法(2)
               前序遍歷,交換左右子樹,遞歸遍歷
              方法(3) 
               使用非遞歸的方法,遍歷左右子樹

            2 代碼如下:
              
            #include <iostream>
            #include 
            <stack>

              
            using namespace std ;
              
              template 
            <class T>
              
            struct BinaryTree{
                 T data ;
                 BinaryTree 
            * lc ;
                 BinaryTree 
            * rc ;             
              }
             ;
             
             BinaryTree 
            <int> * root ;
             BinaryTree 
            <int> * image ;
             
              
             
            const int N = 7 ;
             

             
             
              template 
            <class T>
              
            void  switchs( BinaryTree <T> * p ,stack <BinaryTree<T>*> st)
                
            {
                   
            while(!st.empty()) //當(dāng)st不為空的時(shí)候 
                   {
                      BinaryTree 
            <T> * top = st.top() ;
                      st.pop() ;
                      
            while(top) //前序遍歷,右節(jié)點(diǎn)依次插入堆棧,左節(jié)點(diǎn)依次進(jìn)行操作
                      {          //此處也可以,左節(jié)點(diǎn)和右節(jié)點(diǎn)都入棧 
                        BinaryTree <T> * temp = top->lc ; //交換        
                        top->lc = top->rc ;         
                        top
            ->rc = temp ;        
                                 
                        
            if(top->rc)  //右節(jié)點(diǎn)依次壓棧 
                          st.push(top->rc) ;          
                                 
                                
                        top 
            = top->lc ;
                      }

                                        
                   }
                      
                }

             
              template 
            <class T>
              
            void buildTree(T x) //正規(guī)的二叉查找樹 
              {
                
            if(root == 0)
                
            {
                    root 
            = (BinaryTree <T> *) malloc(sizeof(BinaryTree <T>)) ;
                    root
            ->lc = 0 ;
                    root
            ->rc = 0 ;
                    root
            ->data = x ;
                    
            return ;
                }

                
                BinaryTree 
            <T> * p = root ;
                BinaryTree 
            <T> * q = root ;
                
                
            while(p)
                
            {
                   q 
            = p ;      
                   
            if(p->data <= x)
                       p 
            = p->rc ;
                   
            else
                       p 
            = p->lc ;              
                }

                
                p 
            = (BinaryTree <T> *) malloc(sizeof(BinaryTree <T>)) ;
                p
            ->data = x ;
                p
            ->lc = 0 ;
                p
            ->rc = 0 ;
                
                
            if(q->data > x)
                  q
            ->lc = p ;
                
            else
                  q
            ->rc = p ;     
              }
              
              
              
              
              template 
            <class T>
              
            void buildImageTree(T x) //正規(guī)的二叉查找樹 
              {
                
            if(image == 0)
                
            {
                    image 
            = (BinaryTree <T> *) malloc(sizeof(BinaryTree <T>)) ;
                    image
            ->lc = 0 ;
                    image
            ->rc = 0 ;
                    image
            ->data = x ;
                    
            return ;
                }

                
                BinaryTree 
            <T> * p = image ;
                BinaryTree 
            <T> * q = image ;
                
                
            while(p)
                
            {
                   q 
            = p ;      
                   
            if(p->data <= x)
                       p 
            = p->lc ;
                   
            else
                       p 
            = p->rc ;              
                }

                p 
            = (BinaryTree <T> *) malloc(sizeof(BinaryTree <T>)) ;
                p
            ->data = x ;
                p
            ->lc = 0 ;
                p
            ->rc = 0 ;
                
                
            if(q->data <= x)
                  q
            ->lc = p ;
                
            else
                  q
            ->rc = p ;     
              }
              
              
              template 
            <class T>
              
            void postOrder(BinaryTree <T> * p)
              
            {
                  
            if(p)
                  
            {
                    postOrder(p
            ->lc) ;   
                    cout
            <<p->data<<" " ;             
                    postOrder(p
            ->rc) ;
                  }
             
                   
              }

              
               template 
            <class T>
              
            void preOrder(BinaryTree <T> * p )
              
            {
                  
            if(p)
                  
            {
                    buildImageTree(p
            ->data) ;   
                    preOrder(p
            ->lc) ;                        
                    preOrder(p
            ->rc) ;
                  }
             
                   
              }

              
               template 
            <class T> //可以看做交換左右兩個(gè)節(jié)點(diǎn) 
                void switcLR(BinaryTree <T> * p)
                
            {
                   
            if(p)
                  
            {
                        
                    BinaryTree 
            <T> * temp = p->lc ;  
                    p
            ->lc = p->rc ;
                    p
            ->rc = temp ;     
                    switcLR(p
            ->lc) ;                        
                    switcLR(p
            ->rc) ;
                  }
                               
                }

              
              
               
            int main()
               
            {   
                    
            int i ;
                   
            int a[] = {8 ,6 ,10 , 5 ,79 , 11}  ;
                
                   
            for(i = 0 ; i < N ; i++)
                    buildTree(a[i]) ;
                   
                   postOrder(root) ;
                   cout
            <<endl ;
                   
                   stack 
            <BinaryTree <int> *>  st ;
                   st.push(root) ; 
            //首先把根傳進(jìn)去 
                   switchs(root , st) ;
                   postOrder(root) ;
                   
                   system(
            "pause");
                 
            return 0 ;    
               }

            posted on 2011-05-17 09:02 kahn 閱讀(837) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 算法相關(guān)

            色偷偷91久久综合噜噜噜噜| 国内精品久久久久| 国产成人精品综合久久久| 久久久久久精品久久久久| 久久国产精品二国产精品| 国产精品18久久久久久vr| 色播久久人人爽人人爽人人片AV| 岛国搬运www久久| 久久久久久久尹人综合网亚洲| 亚洲国产精品久久电影欧美| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲国产一成久久精品国产成人综合 | 久久中文字幕视频、最近更新| 久久免费线看线看| 国产精品久久永久免费| 国产精品一区二区久久精品| 精品久久久久久国产潘金莲 | 777午夜精品久久av蜜臀| 久久国产色av免费看| 香蕉久久久久久狠狠色| 久久综合日本熟妇| 欧美麻豆久久久久久中文| 日韩中文久久| 精品综合久久久久久98| 久久久久亚洲AV无码观看| 久久青青草视频| 亚洲国产美女精品久久久久∴| 国产成人精品三上悠亚久久| 亚洲国产精品无码久久一区二区 | 久久久亚洲裙底偷窥综合| 久久亚洲AV成人无码电影| 国产麻豆精品久久一二三| 久久精品免费一区二区三区| 狠狠色伊人久久精品综合网| 伊人久久大香线蕉综合网站| 成人久久免费网站| 亚洲午夜久久久影院| 久久综合中文字幕| 欧美精品一区二区久久| 久久久亚洲欧洲日产国码aⅴ| 国产精品久久成人影院|