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


    遍历一棵二叉树常用的有四种方法,前序(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;
            }
        }
  • 相关阅读:
    LRU算法实现 最近最久未使用
    快速排序
    redis 常用命令
    实例:接口并发限流RateLimiter
    Hadoop伪分布式安装
    ssl免密登录(centos6)
    Linux下安装jdk-7u67-linux-x64.rpm
    Mosquitto安装和使用
    MQTT linux centOS7 部署
    CentOS更换yum源
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/12332397.html
Copyright © 2020-2023  润新知