Binary Tree Postorder Traversal 二叉树后续遍历@LeetCode

来源:互联网 发布:got it 和get it 编辑:程序博客网 时间:2024/05/17 09:38

迭代解法在那篇面试总结二中写了


package Level3;import java.util.ArrayList;import Utility.TreeNode;/** * Binary Tree Postorder Traversal *  *  Given a binary tree, return the postorder traversal of its nodes' values.For example:Given binary tree {1,#,2,3},   1    \     2    /   3return [3,2,1].Note: Recursive solution is trivial, could you do it iteratively? * */public class S134 {public static void main(String[] args) {}public ArrayList<Integer> postorderTraversal(TreeNode root) {ArrayList<Integer> ret = new ArrayList<Integer>();if(root == null){return ret;}rec(root, ret);return ret;    }public void rec(TreeNode root, ArrayList<Integer> ret){if(root == null){return;}rec(root.left, ret);rec(root.right, ret);ret.add(root.val);}}


/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public ArrayList<Integer> postorderTraversal(TreeNode root) {        ArrayList<Integer> ret = new ArrayList<Integer>();        if(root == null){            return ret;        }        Stack<TreeNode> s1 = new Stack<TreeNode>();        Stack<TreeNode> s2 = new Stack<TreeNode>();        s1.push(root);        while(!s1.isEmpty()){            TreeNode cur = s1.pop();            s2.push(cur);            if(cur.left != null){                s1.push(cur.left);            }            if(cur.right != null){                s1.push(cur.right);            }        }        while(!s2.isEmpty()){            ret.add(s2.pop().val);        }        return ret;    }}



原创粉丝点击