【问题标题】:What is wrong with this method that checks if a tree is a BST or not这种检查树是否为 BST 的方法有什么问题
【发布时间】:2015-02-05 01:46:40
【问题描述】:

我在为真正的决赛而学习的“练习决赛”中遇到了这个问题:

我想不出为什么这种方法行不通。逻辑似乎很好。只有当每个 left

任何提示将不胜感激!

【问题讨论】:

  • 也许false 分支也应该检查是否相等
  • 好吧,我不这么认为。我相信 left
  • 假设您有这样的 BST:{0} | {-2, 2} | {, 1}, {-1, }。然后root->left->right > root 但通过了你的测试。
  • @GabrielH:是的。这就是 BST 的全部意义所在。搜索值时,只需将其与当前节点进行比较,然后跟随左子树或右子树。这要求左侧(右侧)的所有个节点不大于(小于)当前节点。
  • 好吧 - 原来我一直不知道 BST 是什么。我能做到这一点真是太棒了:)。

标签: recursion binary-tree binary-search-tree


【解决方案1】:

除了重复值之外,二叉搜索树的definition 要求:

左子树只包含键小于父节点的节点;右子树只包含键大于父节点的节点。

您问题中的代码没有检查这一点。考虑以下树:

  2
 /
1
 \
  3 

这将通过测试,但不是有效的 BST:要成为 BST,3 必须位于 2right 子树中。

有关正确实现的示例,请参阅 https://stackoverflow.com/a/759851/367273

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多