转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51494797
Subject
出处:https://leetcode.com/problems/binary-tree-postorder-traversal/
Hard 级别
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].
Explain
求二叉树的后续遍历。
Solution
solution 1
递归方式
private List<Integer> resultList = new ArrayList<Integer>();
/**
* 递归方式 <br />
* 1ms
*
* @param root
* @return
*/
public List<Integer> postorderTraversal(TreeNode root) {
postOrder(root);
return resultList;
}
private void postOrder(TreeNode node) {
if (node == null) {
return;
}
if (node.left != null) {
postOrder(node.left);
}
if (node.right != null) {
postOrder(node.right);
}
resultList.add(node.val);
}
LeetCode上Run Time 是 1ms。
Your runtime beats 70.01% of java submissions.
solution 2
非递归方式的思想就是需要记录访问的结点是否是第一次访问的。因为当前结点需要在左右子数访问之后才能输出。
所以需要标志来记录当前结点是否是第一次访问。当第二次访问的时候才输出。
/**
* 后续遍历非递归方法
* 根据中序非递归方式改造而来
* @author jacksen
* @param node
*/
public List<Integer> postorderTraversal1(TreeNode node) {
if (node == null) {
return resultList;
}
Stack<WrapperNode> stack = new Stack