有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public class TreePrinter {
public int[][] printTree(TreeNode root) {
int index = 0;
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp = new ArrayList<Integer>();
TreeNode left = root , right = root;
Queue<TreeNode> q = new LinkedList<TreeNode>();
q.add(root);
while(q.peek() != null){
if(q.peek().left != null){
q.add(q.peek().left);
left = q.peek().left;
}
if(q.peek().right != null){
q.add(q.peek().right);
left = q.peek().right;
}
TreeNode aNode = q.remove();
temp.add(aNode.val);
if(right == aNode){
right = left;
if(temp.size() > 0){
list.add(temp);
}
temp = new ArrayList<Integer>();
}
}
//转换数组
int[][] result = new int[list.size()][];
for(int i = 0 ; i < list.size() ; i++){
temp = list.get(i);
result[i] = new int[temp.size()];
for(int j = 0 ; j < temp.size() ;j++){
result[i][j] = temp.get(j);
}
}
return result;
}
}
----------------------------------带测试用例--------------------------------
package test;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class test {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public int[][] printTree(TreeNode root) {
if(root == null) return null;
List<ArrayList<TreeNode>> list = new ArrayList<ArrayList<TreeNode>>();
ArrayList<TreeNode> temp = new ArrayList<TreeNode>();
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode last = root ;
TreeNode nlast = root ;
queue.push(root);
while(queue.peek() != null ){
if(queue.peek().left != null){
queue.add(queue.peek().left);
nlast = queue.peek().left;
}
if(queue.peek().right != null){
queue.add(queue.peek().right);
nlast = queue.peek().right;
}
if(last == queue.peek()){
temp.add(queue.pop());
list.add(temp);
temp = new ArrayList<TreeNode>();
last = nlast;
}else{
temp.add(queue.pop());
}
}
int[][] result = new int[list.size()][];
int index = 0 ;
for(ArrayList<TreeNode> node_list : list){
result[index] = new int[node_list.size()];
int index1 = 0;
for(TreeNode node : node_list){
result[index][index1] = node.val;
index1++;
}
index++;
}
return result;
}
public static void main(String[] a){
test t = new test();
TreeNode a1 = t.new TreeNode(1);
TreeNode a2 = t.new TreeNode(2);
TreeNode a3 = t.new TreeNode(3);
TreeNode a4 = t.new TreeNode(4);
TreeNode a5 = t.new TreeNode(5);
TreeNode a6 = t.new TreeNode(6);
TreeNode a7 = t.new TreeNode(7);
TreeNode a8 = t.new TreeNode(8);
a1.left=a2;
a1.right=a3;
a2.left=a4;
a3.left=a5;
a3.right=a6;
a5.left=a7;
a5.right=a8;
t.printTree(a1);
}
}