繁体   English   中英

在二叉搜索树中找到最接近的值?

[英]Find Closest Value in Binary Search Tree?

我有这个算法结构问题; 编写一个 function,它接受 BST 和目标整数值,并将最接近的值返回到 BST 中包含的目标值。

算法网站让我可以使用它;

function findClosestValueInBst(tree, target) {
  // Write your code here.
}

// This is the class of the input tree. Do not edit.
class BST {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

我不是在问答案,但我如何在我当地的 Visual Studio 代码中对此进行测试? 我需要在 function 的树/目标参数参数中传递什么值,以便我什至测试东西或 console.log 东西出来?

您需要构建有效的搜索树。

首先执行操作Add(root, value)

然后进行操作Find寻找精确的重合,然后SuccessorPredecessor获得比当前值更大或更小的最接近的值。

然后提供值序列来制作一棵树(例如: 6,3,9,0,15,5,7,14 )并测试上述功能。

要实现findClosestValueInBst ,您可以修改Find的代码,但是当您发现元素缺失(站在最后一片树叶处)时,调用SuccessorPredecessor function 之一来检查邻居并找到接近目标的值。

您可能想要构建自己的 BST(或几个)来测试您的代码。 您可以通过一个接一个地创建一堆节点并将它们链接在一起来手动构建它们,或者编写一个插入 function 以将值传递给并构建您的树。 如果您愿意,您可以使用一组值和 map 来构建节点。 只需跟踪 BST 的根节点即可。

然后使用您创建的 BST 的根和几个不同的目标值调用您的 function。 查看您的 function 是否返回您期望的值。 尝试涵盖所有常见和边缘情况:目标正好在树中; 目标在根节点、内部节点、叶节点; 目标不在树中,而是在两个值之间(请参阅返回更接近的值); 不在树中并且大于或大于树中的所有内容(请参阅实际返回树中的最大值或最小值); 看到它为空的 BST 返回了一些合理的东西。

为一两个 BST 执行此操作,您应该非常确信您的 function 可以正常工作。

提示:

想想go怎么会出错。 典型的错误是

  • 严重的编程错误(二进制搜索完全错误,错别字);

  • 微妙的限制情况(空树,单个节点的树,两个节点;相等的节点;目标等于一个节点,目标在中间;在少数节点上二分查找错误......)。

对于每种情况,您如何检查?


我建议不要只尝试几个测试用例,而是使用您知道必须在战略位置持有的断言来检测代码。 例如,检查解决方案是否仍然在您考虑的子树中找到。

还要确保实施防弹 function 在所有情况下都返回正确答案(效率无关紧要)。


由于该练习似乎不是关于如何构建 BST,因此可以为这部分任务复制现有代码。 确保来源可靠。 (为了双重安全,您可以验证已构建的树。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM