当前位置: 首页 > 知识库问答 >
问题:

查找树是否为二元搜索树

彭鹭洋
2023-03-14

这种方法在确定树是否为BST时是错误的吗?节点的左子树仅包含键小于节点键的节点。节点的右子树仅包含键大于节点键的节点。左右子树也必须是二叉搜索树。我的代码是:

isBST(struct node* node) 
{ 
  if (node == NULL) 
    return 1; 
  if (node->left != NULL && node->left->data > node->data) 
    return 0; 
  if (node->right != NULL && node->right->data < node->data) 
    return 0; 
  if (!isBST(node->left) || !isBST(node->right)) 
    return 0; 
  return 1; 
}

共有1个答案

那利
2023-03-14

不,这种方法是错误的,因为它会为这棵树返回一个真正的答案:

     6
    / \
   4   9
  / \
 2   10

虽然它不是二叉搜索树!我建议一个更好的方法是进行inorder遍历,并验证它是否实际排序

 类似资料:
  • 我写了一个函数,如果给定的二叉树是二叉搜索树,则返回true,否则返回false。 我的功能对吗?

  • 编写一个Lisp程序来检查一个二叉树是否是二叉搜索树。 我正在尝试编写一个二进制递归方法,但我是一个初学者,我不知道从这里去哪里。

  • 我正试图解决这个问题,但我遇到了一些麻烦: 在二进制搜索树(BST)中: 节点左子树中每个节点的数据值小于该节点的数据值。 节点右侧子树中每个节点的数据值大于该节点的数据值。 如您所见,节点(4)位于节点(3)的左侧子树中,尽管4大于3,因此方法应该返回。但是,我的代码返回。 我怎么能控制这个案子?如何检查左/右子树中的所有值都低于/大于根(不仅是直接子树)?

  • 主要内容:src/runoob/binary/BinarySearchTreeSearch.java 文件代码:二分搜索树没有下标, 所以针对二分搜索树的查找操作, 这里定义一个 contain 方法, 判断二分搜索树是否包含某个元素, 返回一个布尔型变量, 这个查找的操作一样是一个递归的过程, 具体代码实现如下: ... // 查看以node为根的二分搜索树中是否包含键值为key的节点, 使用递归算法 private boolean contain (Node node, Key key )

  • 我正在研究一种寻找阳极父级的方法。我从根部开始,然后沿着叶子往下走,只要它们不是空的,不是孩子的节点。 下面是我的代码,它有点乱,因为我试着测试它看看哪里出了问题。

  • 我希望在BST中找到具有特定值的节点的父节点。我的节点类具有左右属性项(即值/键)。 查找父级的想法是这样的: 1)如果值(key)不存在,则返回无,无 2)如果根等于值(key),则返回无,根 3)否则查找值(key)并返回(par, node),其中par是父级和节点 我的函数是这样的: 当 为“无”时,如何处理该问题?