![](/img/trans.png)
[英]How to correctly show that a value isn't present in an array when performing a binary search
[英]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
null
或undefined
,則上述方法將起作用。
或者,當該方向不再有子級時,您可以省略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.