在 JS 中查找我的第一个二叉搜索树的高度时遇到问题
Posted
技术标签:
【中文标题】在 JS 中查找我的第一个二叉搜索树的高度时遇到问题【英文标题】:Having problems finding the height of my first Binary Search Tree in JS 【发布时间】:2022-01-24 00:14:10 【问题描述】:这是我的构造函数以及我的“添加”方法...
function BinarySearchTree(value)
this.value = value;
this.right = null;
this.left = null;
BinarySearchTree.prototype.add = function(value)
if (value < this.value)
if (this.left) this.left.add(value);
else this.left = new BinarySearchTree(value);
if (value > this.value)
if (this.right) this.right.add(value);
else this.right = new BinarySearchTree(value);
;
这是我正在尝试制作的“getNodeHeight”方法...
BinarySearchTree.prototype.getNodeHeight = function(node)
if (node.value === null)
return -1;
return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;
这是我正在运行的测试用例...
binarySearchTree = new BinarySearchTree(5);
binarySearchTree.left = new BinarySearchTree(3);
binarySearchTree.left.left = new BinarySearchTree(1);
binarySearchTree.getNodeHeight(this);
每次我将最后一个记录到控制台时,我都会收到“无法读取未定义的属性(读取'值')”。我相信我可能错误地使用了 'this' 关键字……但我试过弄乱它但无法弄清楚!
任何提示、技巧或帮助将不胜感激...感谢您的宝贵时间!
【问题讨论】:
【参考方案1】:问题出在getNodeHeight
函数在node.right
(即null
)上调用时的第一行。 null
没有 value
属性。如果你评估也会出现同样的错误
null.value
通过改变来解决这个问题
if (node.value === null) ...
到
if (!node) ...
在进一步调查中,在binarySearchTree.getNodeHeight(this)
中使用this
关键字可能会返回对您的Window 对象的引用,而不是binarySearchTree
。尝试通过
BinarySearchTree.prototype.getNodeHeight(binarySearchTree)
祝你好运!
【讨论】:
嗯...我试过你说的,但我仍然得到“无法读取未定义的属性(读取'值')”我是否正确使用'this'? 我更新了我的答案。使用if (!node)
而不是if (node === null)
。
不...仍然是同样的错误!不过谢谢!
没有。我会帮你! :) 我认为实际问题很可能是您尝试使用 this
关键字来引用 binarySearchTree
,但这可能会返回对其他东西的引用(可能是 Window 对象)。尝试通过BinarySearchTree.prototype.getNodeHeight(binarySearchTree)
调用函数。【参考方案2】:
有两个问题,一个是@Austin 指出的关于检查输入值是否为空的问题。
另一个问题是getNodeHeight
没有默认值。为此,我假设您期望默认行为来查找整棵树的高度。将 this
传递给 getNodeHeight
是在您创建 BinarySearchTree 的上下文中传递 - 而不是实例。
function BinarySearchTree(value)
this.value = value;
this.right = null;
this.left = null;
BinarySearchTree.prototype.add = function(value)
if (value < this.value)
if (this.left) this.left.add(value);
else this.left = new BinarySearchTree(value);
if (value > this.value)
if (this.right) this.right.add(value);
else this.right = new BinarySearchTree(value);
;
BinarySearchTree.prototype.getNodeHeight = function(node = this)
if (node === null)
return -1;
return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;
const binarySearchTree = new BinarySearchTree(5);
binarySearchTree.left = new BinarySearchTree(3);
binarySearchTree.left.left = new BinarySearchTree(1);
console.log(binarySearchTree.getNodeHeight());
【讨论】:
以上是关于在 JS 中查找我的第一个二叉搜索树的高度时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章