1. 程式人生 > 實用技巧 >LeetCode(102):二叉樹的層序遍歷

LeetCode(102):二叉樹的層序遍歷

題目描述

實現思路

二叉樹的層次遍歷,是與廣度優先搜尋的特點相對應的
原來的廣度優先搜尋程式碼如下:

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
};