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

            二叉樹前序,中序,后序遍歷的非遞歸實現(xiàn)(c++版)

            1. 二叉樹后序非遞歸遍歷:

             1#include <stack>
             2#include <iostream>
             3using namespace std;
             4
             5template <class T>
             6class TreeNode
             7{
             8  public:
             9    T data;
            10    TreeNode<T> *left; //left child
            11    TreeNode<T> *right; //right child
            12 
            13    TreeNode():left(NULL),right(NULL)
            14    {
            15    }

            16
            17    TreeNode(const T& t):data(t),left(NULL), right(NULL)
            18    {
            19    }

            20
            21    TreeNode(const T& t, TreeNode<T*> left, TreeNode<T*> right):data(t),left(left), right(right)
            22    {
            23    }

            24}
            ;
            25
            26/**purpose: 對二叉樹進(jìn)行后序遍歷(非遞歸算法)
            27 TreeNode<T> *root :the root of the binary tree
            28  */

            29template <class T>
            30void postOrder(TreeNode<T> *root)
            31{
            32  stack<TreeNode<T>*> st;
            33  TreeNode<T> *= root;
            34  TreeNode<T> *pre = NULL;//pre表示最近一次訪問的結(jié)點(diǎn)
            35 
            36  while(p || st.size()!=0)
            37  {
            38    //沿著左孩子方向走到最左下 。
            39    while(p)
            40    {
            41      st.push(p);
            42      p = p->left;
            43    }

            44    //get the top element of the stack
            45    p = st.top();
            46    //如果p沒有右孩子或者其右孩子剛剛被訪問過,則訪問p節(jié)點(diǎn),并從棧中刪除
            47   if(p->right == NULL || p->right == pre)
            48    {
            49      //visit this element and then pop it
            50      cout << "visit: " << p->data << endl;
            51      st.pop();
            52      pre = p; //標(biāo)記最近被訪問的節(jié)點(diǎn)
            53      p = NULL; //這樣,接下來可以訪問父節(jié)點(diǎn)
            54     
            55    }

            56   else
            57   {
            58     p = p->right;
            59    
            60   }

            61  }
            //end of while(p || st.size()!=0)
            62
            63}

            64
            65


            2.二叉樹前序非遞歸遍歷:

             1template <class T>
             2void PreOrder(TreeNode<T> *root)const
             3{
             4    stack<TreeNode<T>*> st;
             5    TreeNode<T>* p=root;
             6
             7    while (!st.empty()||p!=NULL)
             8    {
             9        while(p)   //沿左子樹到底,訪問途中結(jié)點(diǎn)并壓棧保存
            10        {
            11            cout<<"visit:"<<p->data<<endl;
            12            st.push(p);
            13            p=p->left;
            14        }

            15
            16        p=st.top(); //將父結(jié)點(diǎn)出棧,對右子樹訪問
            17        st.pop();
            18        p=p->right;        
            19
            20    }

            21
            22
            23}

            3.二叉樹中序非遞歸遍歷:
             

             1void InOrder(TreeNode<T>*root)const
             2{
             3    stack<TreeNode<T>*> st;
             4    TreeNode<T>* p=root;
             5    while (!st.empty()||p!=NULL)
             6    {
             7        while(p)//沿左子樹到底,將途中結(jié)點(diǎn)壓棧保存,不訪問
             8        {
             9            st.push(p);
            10            p=p->left;
            11        }

            12        p=st.top();
            13        cout<<"visit:"<<p->data<<endl; //此時訪問,實現(xiàn)中序
            14        st.pop();
            15        p=p->right;
            16
            17    }

            18
            19}

            posted on 2010-10-22 19:05 oliver 閱讀(1625) 評論(1)  編輯 收藏 引用 所屬分類: DataStructure

            評論

            # re: 二叉樹前序,中序,后序遍歷的非遞歸實現(xiàn)(c++版) 2012-11-22 23:11 missgya

            看了這么多,發(fā)現(xiàn)閣下的后序遍歷寫得最漂亮。  回復(fù)  更多評論   


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


            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆檔案

            文章分類

            文章檔案

            個人專欄

            技術(shù)網(wǎng)站

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品aⅴ无码中文字字幕重口| 色99久久久久高潮综合影院| 久久99热只有频精品8| 欧美黑人又粗又大久久久| 精品久久久久久久久午夜福利| 国产综合成人久久大片91| 久久免费视频1| 国产精品成人精品久久久| 精品综合久久久久久98| 久久99热精品| 亚洲欧美成人综合久久久 | 午夜福利91久久福利| 囯产极品美女高潮无套久久久| 久久精品国产亚洲一区二区三区| 国色天香久久久久久久小说| 久久一区二区免费播放| 国产精品久久国产精麻豆99网站| 久久99久国产麻精品66| 色婷婷狠狠久久综合五月| 精品国产一区二区三区久久| 人人妻久久人人澡人人爽人人精品| 欧美久久精品一级c片片| 午夜精品久久久久久久久| 久久午夜福利无码1000合集| 久久精品免费一区二区三区| 久久久噜噜噜久久熟女AA片| 7777精品伊人久久久大香线蕉| 久久久久无码精品| 久久99精品久久久久久水蜜桃| 97久久精品人妻人人搡人人玩| 久久精品毛片免费观看| 亚洲va中文字幕无码久久| 亚洲AV日韩AV永久无码久久| 久久亚洲日韩看片无码| 99久久无色码中文字幕人妻| 伊人久久综合无码成人网| 久久天天躁狠狠躁夜夜网站| 久久永久免费人妻精品下载| WWW婷婷AV久久久影片| 久久er国产精品免费观看2| 久久综合九色综合精品|