hand —— 二叉树的非递归遍历

使用栈模拟递归调用

先序遍历代码

 private static ArrayList search(TreeNode node) {
        if (node == null) {
            return null;
        }
        Stack<TreeNode> stack = new Stack<>();
        ArrayList<Integer> list = new ArrayList<>();
        stack.push(node);
        //从根节点开始将所有的左子树入栈
        while (!stack.empty()) {
            TreeNode pop = stack.pop();
            if (pop == null) {
                break;
            }
            list.add(pop.val);
//            System.out.println(pop.val);
            stack.push(pop.right);
            stack.push(pop.left);
        }
        return list;
    }

先序遍历的顺序是: 中 → 左 → 右

栈是先进后出的结构,所以在入栈的时候,需要右边的节点先入栈,这样出来的时候才是先出来

后序遍历顺序是 : 左 → 右 → 中

观察先序遍历:将子节点的入栈顺序做更改变成 中 → 右 → 左(子节点的顺序只是更改代码顺序就可实现)

然后将输出的链表做一个反转,就可以得到后序遍历的顺序

中序遍历:请参考其他博客

猜你喜欢

转载自blog.csdn.net/awodwde/article/details/119246816