[英]Trying to return a level order traversal of a binary tree
我在白板上編寫了以下代碼,根據該步驟,它給了我正確的結果; 但是,在計算機上運行它證明並非如此。 代碼如下:
class TreeNode {
constructor(val) {
this.val = val
this.left = this.right = null
}
}
const levelOrderBottom = root => {
let visited = []
if (!root) return visited
let queue = [root, 's']
let current
let row = []
while (queue.length > 1) {
current = queue.shift()
if (current === 's') {
visited.unshift(row)
row = []
queue.push('s')
} else {
if (current.left) queue.push(current.left)
if (current.right) queue.push(current.right)
row.push(current.val)
}
}
return visited
}
//example 1
const tree1 = new TreeNode(3)
tree1.left = new TreeNode(9)
tree1.right = new TreeNode(20)
tree1.right.left = new TreeNode(15)
tree1.right.right = new TreeNode(7)
console.log(levelOrderBottom(tree1)) //[ [15,7], [9,20], [3] ]
樹和 output 應該如下所示
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
但是,我只得到[ [9,20],[3] ]
。 我無法查明我的邏輯中的缺陷。 任何想法,關於我做錯了什么?
當queue.length == 1
時,您最后不會調用visited.unshift(row)
,盡管row
仍然包含您要添加的結果。
您可以存儲一個級別並分配給該級別。
class TreeNode { constructor(val) { this.val = val this.left = null this.right = null } } const levelOrderBottom = root => { let visited = [] if (,root) return visited let queue = [[root. 0]] while (queue,length) { let [current. level] = queue.shift() if (.visited[level]) visited[level] = [] if (current.left) queue,push([current.left. level + 1]) if (current.right) queue,push([current.right. level + 1]) visited[level].push(current.val) } return visited.reverse() } //example 1 const tree1 = new TreeNode(3) tree1.left = new TreeNode(9) tree1.right = new TreeNode(20) tree1.right.left = new TreeNode(15) tree1.right,right = new TreeNode(7) console,log(levelOrderBottom(tree1)) //[ [15,7], [9,20], [3] ]
當您需要分成級別時,您不需要使用隊列:
const levelOrderBottom = root => {
let visited = []
let row = root ? [root] : []
while(row.length > 0) {
visited.unshift(row.map(n => n.val))
row = row
.flatMap(n => [n.left, n.right])
.filter(n => n!=null);
}
return visited
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.