非递归方式如何用一个栈实现二叉树的后续遍历

简介: 非递归方式如何用一个栈实现二叉树的后续遍历

前言:递归方式遍历二叉树不难,理解递归序就很简单——递归方式实现二叉树的三种遍历

非递归的方法就是不用系统栈,通过自己设计的压栈方式来实现——非递归方式实现二叉树的三种遍历

其中先序和中序只需用一个栈可以实现,比较好理解。后序用两个栈实现也好理解。但是一个栈也可以实现二叉树的后序遍历。所以单独拎出来写一篇博客记录!

关键是设置两个变量:
h:记录之前打印的结点的位置
c:记录栈顶的位置

public static void pos2(Node h) {
        System.out.println("pos-order:");
        if(h!=null) {
            Stack<Node> stack=new Stack<>();
            stack.push(h);
            Node c=null;
            while(!stack.isEmpty()) {
                c=stack.peek();
                if(c.left!=null && h!=c.left && h!=c.right) {
                //左树没有处理完,就处理左树
                    stack.push(c.left);
                }else if(c.right!=null && h!=c.right) {
                //右树没有处理完,就处理右树
                    stack.push(c.right);
                }else {
                //左右两边都处理好了,就处理头节点
                //每颗子树都如此,后序遍历是左右头,那么就好理解了
                    System.out.print(stack.pop().value+" ");
                    h=c;
                }
            }
        }
        System.out.println();
    }
相关文章
|
1天前
【数据结构】二叉树的链式结构的实现 -- 详解
【数据结构】二叉树的链式结构的实现 -- 详解
|
1天前
|
存储 分布式数据库
【数据结构】树和二叉树
【数据结构】树和二叉树
|
1天前
|
存储
【数据结构】栈(Stack)的实现 -- 详解
【数据结构】栈(Stack)的实现 -- 详解
|
2天前
|
存储 算法 IDE
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
14 1
|
2天前
|
算法
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(下)
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
7 1
|
2天前
|
算法 C++
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(上)
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
7 1
|
2天前
|
机器学习/深度学习 算法 分布式数据库
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码(下)
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码
10 1
|
2天前
|
算法
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码(上)
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码
11 1
|
2天前
|
存储 移动开发 算法
数据结构与算法⑩(第四章_上)树和二叉树和堆的概念及结构(下)
数据结构与算法⑩(第四章_上)树和二叉树和堆的概念及结构
9 0
|
2天前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法⑩(第四章_上)树和二叉树和堆的概念及结构(上)
数据结构与算法⑩(第四章_上)树和二叉树和堆的概念及结构
9 0