题目
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],
]
java代码
利用层序遍历,结合题目 [populating-next-right-pointers-in-each-node-ii(二叉树每层用指针链接)](http://blog.csdn.net/zh_ang_lei/article/details/70834048)
import java.util.ArrayList;
import java.util.Collections;
public class Solution12 {
public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();// 用来返回结果集合
ArrayList<TreeNode> list = new ArrayList<TreeNode>();
ArrayList<Integer> temp = new ArrayList<Integer>();
if(root == null)
return result;
list.add(root);
while(!list.isEmpty()){
int count = list.size();
for(int i=0; i< count;i++){
TreeNode node = list.remove(0);
temp.add(node.val);
if(node.left != null){
list.add(node.left);
}
if(node.right != null){
list.add(node.right);
}
if(i == count -1){
result.add(new ArrayList<Integer>(temp));
temp.clear();
}
}
}
Collections.reverse(result);
return result;
}
public static void main(String[] args) {
TreeNode root = new TreeNode(5);
TreeNode root1 = new TreeNode(9);
TreeNode root2 = new TreeNode(20);
root.left = root1;
root.right = root2;
TreeNode root3 = new TreeNode(15);
TreeNode root4 = new TreeNode(7);
root2.left = root3;
root2.right = root4;
ArrayList<ArrayList<Integer>> result = new Solution12().levelOrderBottom(root);
System.out.println(result);
}
}