思路:先层遍历在逆序
层遍历递归实现:利用List<List>每次递归根据层号加入List中对应的List,递归的顺序左节点在右节点之前就可以保证每一层左边的节点比右边的节点先加入List。
import java.util.LinkedList;
import java.util.List;
/**
* Created by marsares on 15/6/13.
*/
public class BinaryTreeLevelOrderTraversalII {
List<List<Integer>>lists=new LinkedList<List<Integer>>();
public List<List<Integer>> levelOrderBottom(TreeNode root) {
traversal(root,0);
List<List<Integer>>lists2=new LinkedList<List<Integer>>();
for(int i=lists.size()-1;i>=0;i--){
lists2.add(lists.get(i));
}
return lists2;
}
private void printLists(List<List<Integer>>lists){
for(List<Integer>list:lists){
System.out.print("[");
for(int i=0;i<list.size()-1;i++){
System.out.print(list.get(i)+",");
}
System.out.print(list.get(list.size()-1)+"]");
}
}
public void traversal(TreeNode root,int level){
if(root==null)return;
if(level==lists.size()){
List<Integer>list=new LinkedList<Integer>();
lists.add(list);
}
if(level!= lists.size()){
List<Integer>list=lists.get(level);
list.add(root.val);
}
traversal(root.left,level+1);
traversal(root.right,level+1);
}
public static void main(String[]args){
BinaryTreeLevelOrderTraversalII btot=new BinaryTreeLevelOrderTraversalII();
BinaryTreeSerialize bts=new BinaryTreeSerialize();
TreeNode root=bts.Unserialize("{3,9,20,#,#,15,7}");
btot.printLists(btot.levelOrderBottom(root));
}
}