leetcode - Binary Tree Postorder Traversal

来源:互联网 发布:西雅图必去景点知乎 编辑:程序博客网 时间:2024/05/09 06:49

题目:

二叉树的后序遍历

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].

递归解法:

public List<Integer> postorderTraversal(TreeNode root){List<Integer> res = new ArrayList<Integer>();helper(root, res);return res;}private void helper(TreeNode root, List<Integer> res){if(root == null)return;helper(root.left, res);helper(root.right, res);res.add(root.val);}
非递归解法:

public List<Integer> postorderTraversal(TreeNode root){List<Integer> res = new ArrayList<Integer>();Stack<TreeNode> stack = new Stack<TreeNode>();TreeNode pre = null;while(root != null || !stack.isEmpty()){if(root != null){stack.push(root);root = root.left;}else{TreeNode peek = stack.peek();// 如果当前栈顶元素的右结点存在并且还没访问过//(也就是右结点不等于上一个访问结点),那么就把当前结点移到右结点继续循环if(peek.right != null && pre != peek.right){root = peek.right;}else{stack.pop();res.add(peek.val);pre = peek;}}}return res;}


0 0
原创粉丝点击