剑指 Offer 32 - III. 从上到下打印二叉树 III
难度简单234
从上到下打印二叉树I
从上到下打印二叉树II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
思路
其实就是层次遍历,遍历完第一排之后,就遍历下一排,左到右,先进先出(链表,队列)
只是这里的变动就是,你每一层遍历元素用list 存元素,一层遍历完之后,用lists 存list。
最后用一个统计层数的数字,只有单数层就添加,否则就是反转list 数组
题目算法代码如下
public class 从上到下打印二叉树3 {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> lists=new ArrayList<>();
if (root==null){
return lists;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int n=0;
int count=1;
while (!queue.isEmpty()){
n=queue.size();
List<Integer> list = new ArrayList<>();
while (n!=0){
TreeNode node = queue.poll();
list.add(node.val);
if (node.left!=null){
queue.add(node.left);
}
if (node.right!=null){
queue.add(node.left);
}
n--;
}
if (count%2!=0){
//单数层
lists.add(list);
}else {
Collections.reverse(list);
lists.add(list);
}
count++;
}
return lists;
}
}