給定一個二叉樹,按行從左到右輸出一個樹。例如按如下格式:
6
5 15
7 9 10 50
1、遞歸計算,感覺這種辦法好傻
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null)return new ArrayList<List<Integer>>();
List<List<Integer>> listleft=null;
List<List<Integer>> listright=null;
List<List<Integer>> list=new ArrayList<List<Integer>>();
if(root.left!=null){
listleft=levelOrder(root.left);
}
if(root.right!=null){
listright=levelOrder(root.right);
}
if(listleft==null&&listright!=null){
List<Integer> newList=new ArrayList<Integer>();
newList.add(root.val);
list.add(newList);
list.addAll(listright);
return list;
}
if(listleft!=null&&listright==null){
List<Integer> newList=new ArrayList<Integer>();
newList.add(root.val);
list.add(newList);
list.addAll(listleft);
return list;
}
if(listleft==null&&listright==null){
List<Integer> newList=new ArrayList<Integer>();
newList.add(root.val);
list.add(newList);
return list;
}
List<Integer> newList=new ArrayList<Integer>();
newList.add(root.val);
list.add(newList);
int lengthleft=listleft.size();
int lengthright=listright.size();
int i=0,j=0;
while(i<lengthleft&&j<lengthright){
listleft.get(i).addAll(listright.get(j));
j++;i++;
}
list.addAll(listleft);
if(j<lengthright){
for(i=j;i<lengthright;i++){
list.add(listright.get(i));
}
}
return list;
}
2、因爲是按層的,根據先序遍歷,所有可以用一個level來表示層,向level對應的list中添加數據。
public static void getList(TreeNode root, int level,
List<List<Integer>> list) {
if (root == null)
return;
if (list.size() > level) {
List<Integer> temp = list.get(level);
temp.add(root.val);
} else {
List<Integer> temp = new ArrayList<>();
temp.add(root.val);
list.add(level, temp);
}
getList(root.left, level + 1, list);
getList(root.right, level + 1, list);
}
3、利用隊列,先序遍歷。
public static void getList(TreeNode root,List<List<Integer>> list){
Queue<TreeNode> queue=new LinkedList<>();
if(root==null)return;
queue.add(root);
int size=queue.size();
while(!queue.isEmpty()){
List<Integer> temp=new ArrayList<>();
for(int i=0;i<size;i++){
TreeNode node=queue.poll();
temp.add(node.val);
if(node.left!=null)queue.add(node.left);
if(node.left!=null)queue.add(node.right);
}
list.add(temp);
size=queue.size();
}
}