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;
}
}
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;
}
}
相关文章推荐
- LeetCode 之 Binary Tree Level Order Traversal I and II
- [LeetCode]107 Binary Tree Level Order Traversal II
- LeetCode107 Binary Tree Level Order Traversal II
- LeetCode: Binary Tree Level Order Traversal II [107]
- [LeetCode] Binary Tree Level Order Traversal II
- 【Leetcode】【Easy】Binary Tree Level Order Traversal II
- LeetCode:Binary Tree Level Order Traversal II (按层遍历)
- leetcode7:Binary Tree Level Order Traversal II
- [leetcode]Binary Tree Level Order Traversal II
- [leetcode]Binary Tree Level Order Traversal II
- leetcode-Binary Tree Level Order Traversal II
- [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二
- 【LeetCode】Binary Tree Level Order Traversal II
- [LeetCode 107] Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II 二叉树按层遍历(反向输出)@LeetCode
- Leetcode Binary Tree Level Order Traversal II 二叉树分层遍历
- leetcode: Binary Tree Level Order Traversal II
- Leetcode Binary Tree Level Order Traversal II
- Leetcode Binary Tree Level Order Traversal II