Given the root of a binary tree, return the level order traversal of its nodes’ values. (i.e., from left to right, level by level).
給與二元樹的根,傳回其節點值的層序遍歷。 (即由左至右,逐級)。
Example 1:
Input: root = [3,9,20,null,null,15,7] Output: [[3],[9,20],[15,7]]
Example 2:
Input: root = [] Output: []
Example 3:
Input: root = [1] Output: [1]
solution:
1. 首先,我們要知道 level order traversal(層序遍歷)所指的方向,接著:
2. 我們在 Level Order Traversal(root) 的函式中接受 binary tree 的輸入,並透過 bfs 來完成前序遍歷的結果。
3. 我們先判斷 node 是否為 null,如果是則直接返回。
4. 在 bfs(node, result) 中開始做 node 的遍歷。
5. 使用一個 queue 來儲存要訪問的節點。這是 BFS 的基本操作。
6. 在每一次的循環中,我們只考慮當前 queue 中的節點,也就是當前層級的所有節點。
7. 對於當前層級的每個節點,我們先將其從 queue 中移除,然後將其子節點(如果有的話)加入到 queue 中。
8. 訪問完當前層級的所有節點後,我們再繼續下一層級的節點,直到 queue 變空。
ex. 層序遍歷步驟: 1. 訪問當前節點 2. 遍歷左子樹 3. 遍歷右子樹 4. 訪問下一節點 附上示意圖: https://ithelp.ithome.com.tw/articles/10289291
Code 1: BFS
class TreeNode { constructor(val, left = null, right = null) { this.val = val; this.left = left; this.right = right; } } var levelOrder = function(root) { // 1. 檢查 root 是否為空 if (!root) return []; // 2. 創建一個陣列來存放結果 const result = []; // 3. 把根節點放入 BFS 函數中 bfs(root, result); return result; }; function bfs(node, result) { // 初始化 const queue = []; // 創建一個隊列來存放節點 queue.push(node); // 當隊列不為空時,繼續執行 while (queue.length) { const len = queue.length; const row = []; // 對當前階層的每一個節點進行處理 for (let i = 0; i < len; i++) { // 從隊列中取出一個節點 const cur = queue.shift(); // 如果這個節點有左子節點,則將其放入隊列中 if (cur.left) queue.push(cur.left); // 如果這個節點有右子節點,則將其放入隊列中 if (cur.right) queue.push(cur.right); // 將當前節點的值加入到 row 陣列中 row.push(cur.val); } // 最後,將 row 陣列加入到 output 陣列中 result.push(row); } }
FlowChart:
Example 1
TreeNode { val: 3, left: TreeNode { val: 9, left: null, right: null }, right: TreeNode { val: 20, left: TreeNode { val: 15, left: null, right: null }, right: TreeNode { val: 7, left: null, right: null } } } TreeNode { val: 3, left: TreeNode { val: 9, left: null, right: null }, right: TreeNode { val: 20, left: TreeNode { val: 15, left: null, right: null }, right: TreeNode { val: 7, left: null, right: null } } } [ [ 3 ], [ 9, 20 ], [ 15, 7 ] ]
Example 2
const rootNode = []
Example 3
TreeNode { val: 1, left: null, right: null }