题目
从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。
样例

算法
(BFS) O(n)
我们从根节点开始按宽度优先的顺序遍历整棵树,每次先扩展左儿子,再扩展右儿子。
这样我们会:
先扩展根节点;
再依次扩展根节点的左右儿子,也就是从左到右扩展第二层节点;
再依次从左到右扩展第三层节点;
依次类推
所以BFS的顺序就是这道题目要求的顺序。
时间复杂度
BFS时每个节点仅被遍历一次,所以时间复杂度是 O(n)。
class Solution {
public List<Integer> printFromTopToBottom(TreeNode root) {
List<Integer> list = new ArrayList();
Queue<TreeNode> q = new LinkedList();
if(root == null) return list;
q.offer(root);
while(q.size() != 0){
TreeNode tmp = q.peek();
q.poll();
list.add(tmp.val);
if(tmp.left != null)
q.offer(tmp.left);
if(tmp.right != null)
q.offer(tmp.right);
}
return list;
}
}
二叉树层次遍历
本文介绍了一种从上至下、从左至右的二叉树层次遍历算法,即宽度优先搜索(BFS)。通过使用队列,该算法确保了节点的正确访问顺序,实现了O(n)的时间复杂度。
1万+

被折叠的 条评论
为什么被折叠?



