【算法】剑指 Offer-广度优先遍历
程序员文章站
2022-07-12 09:35:24
...
广度优先遍历
剑指 Offer 32 - II. 从上到下打印二叉树 II
把每一层的节点存放在队列中,循环判断队列是否为空,每次循环取出队列内节点,并把取出的节点的左右子节点存入队列中。
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
// 使用LinkedList
Queue<TreeNode> queue = new LinkedList<>();
if(Objects.nonNull(root)){
queue.add(root);
}
while(!queue.isEmpty()){
List<Integer> tmp = new ArrayList<>();
for(int i = queue.size(); i > 0; i--){
TreeNode tmpNode = queue.poll();
tmp.add(tmpNode.val);
if(Objects.nonNull(tmpNode.left)){
queue.add(tmpNode.left);
}
if(Objects.nonNull(tmpNode.right)){
queue.add(tmpNode.right);
}
}
res.add(tmp);
}
return res;
}
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
%2 如果是偶数列则反转
if(res.size()%2 == 1) Collections.reverse(cur);// 如果是偶数列则反转
res.add(cur);
上一篇: 2020.8.10_p4
下一篇: [蓝桥杯][基础练习VIP]矩阵乘法