码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的中序和后序遍历的非递归实现

时间:2020-02-19 19:17:37      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:后序   遍历   四种方法   tor   需要   push   asto   empty   evel   

遍历一棵二叉树常用的有四种方法,前序(PreOrder)、中序(InOrder)、后序(PastOrder)还有层序(LevelOrder)。
前中后序三种遍历方式都是以根节点相对于它的左右孩子的访问顺序定义的。例如根->左->右便是前序遍历,左->根->右便是中序遍历,左->右->根便是后序遍历。
而层序遍历是一层一层来遍历的。

二叉树的中序和后序遍历的非递归实现

先序遍历:

先序遍历时,每当我们压入一个结点,我们压入结点前对其进行访问。

    void preOrder(TreeNode* pRoot, int k)
    {
        stack<TreeNode*> S;
        TreeNode* cur = pRoot;
        while(cur || !S.empty()){
            while(cur){
                S.push(cur);
                cout << cur->value << " ";
                cur = cur->left;
            }
            // 访问根节点
            cur = S.top();
            S.pop();
            cur = cur.right;
        }
    }                

 

中序遍历:

中序时我们需要在遍历完左子树后访问根节点,再去遍历右子树,因此我们仅需依照先序遍历修改部分代码。

    // 中序遍历
    // 如果存在左子树不断压栈,遍历根节点,遍历右子树
    void inOrder(TreeNode* pRoot, int k)
    {
        stack<TreeNode*> S;
        TreeNode* cur = pRoot;
        while(cur || !S.empty()){
            while(cur){
                S.push(cur);
                cur = cur->left;
            }
            // 访问根节点
            cur = S.top();
            S.pop();
            cout << cur->value << " ";
            cur = cur.right;
        }
    }

 

二叉树的中序和后序遍历的非递归实现

标签:后序   遍历   四种方法   tor   需要   push   asto   empty   evel   

原文地址:https://www.cnblogs.com/hi3254014978/p/12332397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!