有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。
解题思路:
思路还是很清晰的,使用两个队列一个存放节点,一个存放值。先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到队列中来
链接:https://www.nowcoder.com/courses/1/1/2
来源:牛客网
public int[][] printTree(TreeNode root) {
// write code here
ArrayList<ArrayList> result = new ArrayList();
ArrayList son = new ArrayList();
LinkedList<TreeNode> list = new LinkedList();
list.add(root);
TreeNode last = root;
TreeNode nlast = null;
TreeNode temp = null;
while (list.size() > 0) {
temp = list.poll();
son.add(temp.val);
if (temp.left != null) {
list.add(temp.left);
nlast = temp.left;
}
if (temp.right != null) {
list.add(temp.right);
nlast = temp.right;
}
if (last == temp) {
last = nlast;
result.add(son);
son = new ArrayList();
}
}
int re[][] = new int[result.size()][];
//变成二维数组
for (int i = 0; i < result.size(); i++) {
son = result.get(i);
/////////
re[i] = new int[son.size()];
for (int j = 0; j < son.size(); j++) {
re[i][j] = (int)son.get(j);
}
}
return re;
}