题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
package niuke;
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > totalNode = new ArrayList<ArrayList<Integer> >();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
ArrayList<Integer> layerNode = new ArrayList<Integer>();
queue.add(pRoot);
Queue<TreeNode> result = new LinkedList<TreeNode>();
TreeNode node = null;
while(queue.size() != 0){
layerNode = new ArrayList<Integer>();
while((node = queue.poll())!=null){
layerNode.add(node.val);
if(node.left!=null) {
result.offer(node.left);
}
if(node.right!=null){
result.offer(node.right);
}
}
queue = result;
result=new LinkedList<TreeNode>();
if(!layerNode.isEmpty()){
System.out.println(layerNode);
totalNode.add(layerNode);
}
}
return totalNode;
}
ArrayList<ArrayList<Integer> > Print2(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
TreeNode temp;
if(pRoot == null){
return result;
}
queue.offer(pRoot);
int start = 0,end = 1;
while(!queue.isEmpty()){
temp = queue.poll();
list.add(temp.val);
start++;
if(temp.left != null){
queue.offer(temp.left);
}
if(temp.right != null){
queue.offer(temp.right);
}
if(start == end){
start = 0;
end = queue.size();
result.add(list);
list = new ArrayList<>();
}
}
return result;
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(8);
TreeNode node21 = new TreeNode(6);
TreeNode node22 = new TreeNode(10);
TreeNode node31 = new TreeNode(5);
TreeNode node32 = new TreeNode(7);
TreeNode node33 = new TreeNode(9);
TreeNode node34 = new TreeNode(11);
node1.left = node21;
node1.right = node22;
node21.left = node31;
node21.right = node32;
node22.left = node33;
node22.right = node34;
new Solution().Print(node1);
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}