【编程题】把二叉树打印成多行(java实现)
题目来源
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解答
方法一
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>>printlist=new ArrayList<ArrayList<Integer>>();
if(pRoot==null)
return printlist;
LinkedList<TreeNode>list=new LinkedList<>();
list.add(pRoot);
while(!list.isEmpty()){
LinkedList<TreeNode>tem=new LinkedList<>();
ArrayList<Integer>innerList=new ArrayList<>();
while(!list.isEmpty()){
pRoot=list.pollFirst();
if(pRoot.left!=null)
tem.add(pRoot.left);
if(pRoot.right!=null)
tem.add(pRoot.right);
innerList.add(pRoot.val);
}
printlist.add(new ArrayList<>(innerList));
list=tem;
}
return printlist;
}
}
方法二
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>>printlist=new ArrayList<ArrayList<Integer>>();
if(pRoot==null)
return printlist;
LinkedList<TreeNode>list=new LinkedList<>();
ArrayList<Integer>innerList=new ArrayList<>();
int start=0,end=1;
list.add(pRoot);
while(!list.isEmpty()){
pRoot=list.pollFirst();
innerList.add(pRoot.val);
start++;
if(pRoot.left!=null)
list.add(pRoot.left);
if(pRoot.right!=null)
list.add(pRoot.right);
if(start==end){
end=list.size();
start=0;
printlist.add(new ArrayList<>(innerList));
innerList=new ArrayList<>();
}
}
return printlist;
}
}