LeetCode(102):二叉樹的層序遍歷
阿新 • • 發佈:2020-11-05
題目描述
實現思路
二叉樹的層次遍歷,是與廣度優先搜尋的特點相對應的
原來的廣度優先搜尋程式碼如下:
varbfs=function(root){ varvisited=newArray() if(root!==null){ varqueue=newArray queue.push(root) while(queue.length>0){ lettemp=queue.shift() visited.push(temp) if(temp.left){ queue.push(temp.left) } if(temp.right){ queue.push(temp.right) } } } returnvisited }
在這個基礎上,我們需要使得:
在每一輪迴圈開始之前,queue中的節點都是處於同一層級的
這就需要我們在上一次迴圈中,將queue中所有節點的子節點都放入queue中
也就是說,需要寫一個巢狀的迴圈
利用內層迴圈來遍歷queue:
先拿出隊首元素(出隊)
再將其子節點放入queue
內層迴圈結束後,將這一輪出隊的元素,推入最終的結果陣列中
程式碼實現(Javascript)
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[][]} */ var levelOrder = function(root) { varvisited=newArray() if(root!==null){ varqueue=newArray() queue.push(root) while(queue.length>0){ let levelSize=queue.length let currentLevel=new Array() for(let i=0;i<levelSize;i++){ let temp=queue.shift() currentLevel.push(temp.val) if(temp.left){ queue.push(temp.left) } if(temp.right){ queue.push(temp.right) } } visited.push(currentLevel) } } returnvisited };