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 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
.
建议重新写一遍 java只改了一个s.add
Source
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> s = new ArrayList<List<Integer>>();
if(root == null) return s;
LinkedList<TreeNode> l = new LinkedList<TreeNode>();
l.add(root);
int cur = 1;
int next = 0;
List<Integer> val = new ArrayList<Integer>();
while(!l.isEmpty()){
TreeNode a = l.poll();
cur--;
val.add(a.val);
if(a.left != null){
l.add(a.left);
next ++;
}
if(a.right != null){
l.add(a.right);
next ++;
}
if(cur == 0){
cur = next;
next = 0;
s.add(0,val); //与Binary Tree Level Order Traversal第一题不同的是,添加的时候添加到最前面就行了。。。
val = new ArrayList<Integer>(); //不用重新写List val =。。。 注意此条 要在一层检查完的时候进行清理
}
}
return s;
}
Test