題目詳情
給你二叉樹的根節點 root
,返回其節點值的 層序遍歷 。 (即逐層地,從左到右訪問所有節點)。
示例 1:
輸入:root = [3,9,20,null,null,15,7]
輸出:[[3],[9,20],[15,7]]
3
/ \
9 20
/ \
15 7
Java代碼(BFS)
public List<List<Integer>> levelOrder(TreeNode root) {
//邊界條件判斷
if (root == null)
return new ArrayList<>();
//隊列
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> res = new ArrayList<>();
//根節點入隊
queue.add(root);
//如果隊列不為空就繼續循環
while (!queue.isEmpty()) {
//BFS打印,levelNum表示的是每層的結點數
int levelNum = queue.size();
//subList存儲的是每層的結點值
List<Integer> subList = new ArrayList<>();
for (int i = 0; i < levelNum; i++) {
//出隊
TreeNode node = queue.poll();
subList.add(node.val);
//左右子節點如果不為空就加入到隊列中
if (node.left != null)
queue.add(node.left);
if (node.right != null)
queue.add(node.right);
}
//把每層的結點值存儲在res中,
res.add(subList);
}
return res;
}
總結
層序遍歷需要使用到隊列,因為返回對象是一個包含列表的列表,所以,新建一個包含列表的列表。先將根節點入隊,然后開始遍歷樹,先得到隊列的大小,然后先建一個列表,將隊列中所有元素加入到新建的列表,然后再將左右節點加入隊列,在for循環后將新建的sublist加入列表