一、题目
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example: Given binary tree [3, 9, 20, null, null, 15, 7],
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
二、分析
【1】迭代 —> BFS (队列)
将树上顶点按照层次依次放入队列中,队列中元素满足 FIFO 的原则。在 Java 中可以使用 Queue 接口中的 LinkedList 实现。
思路:
初始化 ans 列表,以及一个用于存放结点的 nodeQueue 和存放数值的 integerQueue,和一个 width 记录当前层结点的数目.
将同一层中的节点同时入队列。在将 nodeQueue 中某元素出队列的同时,将该元素的下一层的元素进队列。
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new LinkedList<List<Integer>>();;
if(root == null) return ans;
LinkedList<TreeNode> nodeQueue = new LinkedList<>();
TreeNode node;
int width = 0;
nodeQueue.add(root);
while(!nodeQueue.isEmpty()) {
width = nodeQueue.size();
LinkedList<Integer> integerQueue = new LinkedList<>();
for(int i = 0; i < width; i++) {
node = nodeQueue.removeFirst();
integerQueue.addLast(node.val);
if(node.left != null) nodeQueue.add(node.left);
if(node.right != null) nodeQueue.add(node.right);
}//for
ans.add(integerQueue);
}//while
return ans;
}
复杂度分析
时间复杂度:O(N),因为每个节点恰好会被运算一次。
空间复杂度:O(N),保存输出结果的数组包含 N 个节点的值。