题目:
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
代码实现:
后序遍历的通用实现可以查看博客:二叉树遍历系列--后序遍历
递归版本:
class Solution { private List<Integer> postorder = new ArrayList<Integer>(); public List<Integer> postorderTraversal(TreeNode root) { if (root == null) return postorder; postorderTraversal(root.left); postorderTraversal(root.right); postorder.add(root.val); return postorder; } }
非递归版本:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { private List<Integer> postorder = new ArrayList<Integer>(); public List<Integer> postorderTraversal(TreeNode root) { if (root == null) return postorder; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root; while (p != null) { postorder.add(p.val); if (p.left != null) stack.push(p.left); p = p.right; if (p == null && !stack.isEmpty()) { p = stack.pop(); } } for (int i = 0; i < postorder.size() / 2; i ++) { int tmp = postorder.get(i); postorder.set(i, postorder.get(postorder.size() - 1 - i)); postorder.set(postorder.size() - 1 - i, tmp); } return postorder; } }