面试题32 - I. 从上到下打印二叉树 主要考察 树的按层打印 ;
面试题32 - II. 从上到下打印二叉树 II 额外要求 每一层打印到一行 ;
本题额外要求 打印顺序交替变化(建议按顺序做此三道题)。
解法
思路:
1、用一个变量来判断该层是奇数层还是偶数层
2、双端队列的应用
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null){
return new ArrayList<>();
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
List<List<Integer>> res = new ArrayList<>();
// 初始化为奇数层
int level = 1;
while(!queue.isEmpty()){
int size = queue.size();
// 这里需要双端队列,而不是列表
Deque<Integer> list = new LinkedList<>();
for(int i=0;i<size;i++){
TreeNode node = queue.poll();
// 偶数层,添加到队列头部
if(level%2==0){
list.addFirst(node.val);
}else{
// 奇数层,添加到队列尾部
list.addLast(node.val);
}
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
// 层数+1
level++;
res.add(list);
}
return res;
}
}
复杂度
参考:
- https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/solution/mian-shi-ti-32-iii-cong-shang-dao-xia-da-yin-er–3/
- https://blog.algomooc.com/0323.html#%E4%BA%8C%E3%80%81%E9%A2%98%E7%9B%AE%E8%A7%A3%E6%9E%90
- 双端队列: