题目
从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。
样例
算法
(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;
}
}