簡體   English   中英

javascript:使用遞歸方法將二叉樹值推入數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM