zoukankan      html  css  js  c++  java
  • 二叉树的前序和中序遍历的非递归实现

    遍历一棵二叉树常用的有四种方法,前序(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;
            }
        }
  • 相关阅读:
    request.getParameterMap 跟request.getParameter区别
    SQL语句中---删除表数据drop、truncate和delete的用法
    今日出现两个错误
    html和jsp的区别及优缺点
    怎么将 美国的日期格式改成中国的日期格式
    java web相关的面试题
    i++与++i的关系
    Oracle常见的语法,以及跟MySQL的区别
    DBA
    java基础之印象笔记
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/12332397.html
Copyright © 2011-2022 走看看