您的位置:首页 > 其它

LeetCode 45 Binary Tree Level Order Traversal II

2014-08-31 10:40 246 查看
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example:

Given binary tree {3,9,20,#,#,15,7},

3
/ \
9 20
/ \
15 7return its bottom-up level order traversal as:
[
[15, 7],
[9, 20],
[3]
]分析:
我的想法是在层序遍历的基础上,用一个栈保留中间结果,这样输出的时候就可以保证自底向上的。

/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(root==null) return result;
Stack<List<Integer>> st = new Stack<List<Integer>>();
Queue<TreeNode> q1 = new LinkedList<TreeNode>();
Queue<TreeNode> q2 = new LinkedList<TreeNode>();
q1.add(root);
while(!q1.isEmpty() || !q2.isEmpty()){
List<Integer> level = new ArrayList<Integer>();
if(!q1.isEmpty()){
while(!q1.isEmpty()){
TreeNode temp = q1.remove();
if(temp.left != null) q2.add(temp.left);
if(temp.right != null) q2.add(temp.right);
level.add(temp.val);
}
st.push(level);
continue;
}
if(!q2.isEmpty()){
while(!q2.isEmpty()){
TreeNode temp = q2.remove();
if(temp.left != null) q1.add(temp.left);
if(temp.right != null) q1.add(temp.right);
level.add(temp.val);
}
st.push(level);
}
}
while(!st.isEmpty())
result.add(st.pop());
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息