簡體   English   中英

遞歸二叉搜索樹時無法正確返回我的值

[英]Can't return my value correctly when recursing a Binary Search Tree

我已經測試過是否可以正確插入我的樹,並且正在使用偽經典實例化來完成這項工作。 我的問題是調試器會告訴我真值設置為true,然后當我從函數末尾返回真值時,我得到了false。 我已經嘗試了所有可以想到的方法,但是我不知道為什么會這樣。 這是我搜索二進制搜索樹的代碼。

  var valuetest; var truth = false; if (this.value === value) { var truth = true; return truth; } else if (value > this.value) { valuetest = this.right.value; if (valuetest === value) { truth = true; return truth; } else { this.right.contains(value); } } else { valuetest = this.left.value; if (valuetest === value) { truth = true; return truth; } else { this.left.contains(value); } } return truth; //returns false even if truth is set to true for some reason. 

更新了返回的行。 試試這個片段。

  var valuetest; var truth = false; if (this.value === value) { var truth = true; return truth; } else if (value > this.value) { valuetest = this.right.value; if (valuetest === value) { truth = true; return truth; } else { return this.right.contains(value); } } else { valuetest = this.left.value; if (valuetest === value) { truth = true; return truth; } else { return this.left.contains(value); } } return truth; //returns false even if truth is set to true for some reason. 

您忘記了return遞歸調用。 所以你看Boole語義的真真正得到,但隨后一個水平回到了遞歸的, 真相變量是有不同的變量,它不會設置的。

另外,您已經通過重復相等性檢查實現了獨立交易的遞歸 ,在這里確實沒有必要。 您可以將代碼壓縮為:

return value === this.value  ||
       value > this.value && this.right && this.right.contains(value) ||
       value < this.value && this.left && this.left.contains(value);

如果找不到該值,則應停止遞歸。 如果您以這樣的方式構建樹,即當value代表葉子時value nullundefined ,則上述方法將起作用。

或者,當該方向不再有子級時,您可以省略left和/或right屬性。 同樣,如果樹是這樣構建的,則上面的代碼將起作用。

還是更聰明:

const branch = this[value > this.value ? 'right' : 'left'];
return value === this.value  || branch && branch.contains(value);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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