[英]javascript: pushing binary tree values into an array using the recursion method
我正在嘗試使用順序遍歷和遞歸方法遍歷二叉搜索樹。 我的目標是將每個節點的值推入一個數組並返回它。 這是我的代碼:
dfsInOrder(node=this.root) {
let nodes = []
if(node === null) return
nodes.push(this.dfsInOrder(node.left))
nodes.push(node.val)
nodes.push(this.dfsInOrder(node.right))
return nodes
}
這是我將數據插入樹的方式:
binarySearchTree
.insert(15)
.insert(20)
.insert(10)
.insert(12);
為澄清起見,樹的根值是 15,10 和 12 都在樹的左側。 20 在右邊。
我正在尋找這樣的結果:
[12,10,15,20]
但相反,我得到了這個:
[Array(3), 15, Array(3)].....
[undefined, 10, Array(3)]
15
[undefined, 20, undefined]
我的代碼哪里出錯了?
這是解決此問題的一種方法:
dfsInOrder(node=this.root) {
const nodes = [];
if (node !== null) {
nodes.push(
...this.dfsInOrder(node.left),
node.val,
...this.dfsInOrder(node.right)
);
}
return nodes;
}
在這段代碼中, dfsInOrder
...
undefined
值...
運算符)插入到結果數組中時,總是將它們展平作為旁注, push
不會更改您的數組引用,因此此處無需使用let
。 實際上,可以重寫此函數以完全避免中間變量:
dfsInOrder(node=this.root) {
if (node === null) return [];
return [
...this.dfsInOrder(node.left),
node.val,
...this.dfsInOrder(node.right),
];
}
...這對我來說很好,但調試起來稍微困難一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.