LeetCode每日一题:二叉树后序遍历

问题描述

Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree{1,#,2,3},
1

2
/
3

return[3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?

问题分析

考察二叉树的后序遍历(左右根),不用递归实现

代码实现

public ArrayList postorderTraversal(TreeNode root) {
        TreeNode cur = root;
        TreeNode pre = null;
        Stack stack = new Stack();
        ArrayList list = new ArrayList();
        while (cur != null || stack.isEmpty() == false) {
            if (cur != null) {
                stack.push(cur);
                cur = cur.left;//左孩子入栈
            } else {
                cur = stack.peek();
                cur = cur.right;//左孩子空了后,从栈顶元素右孩子开始重复左孩子入栈过程
                if (cur != null && cur != pre) {
                    stack.push(cur);
                    cur = cur.left;
                } else {
                    cur = stack.pop();
                    list.add(cur.val);
                    pre = cur;
                    cur = null;
                }
            }
        }
        return list;
    }

你可能感兴趣的:(LeetCode每日一题:二叉树后序遍历)