C 如何验证二进制搜索树?

C 如何验证二进制搜索树?,c,data-structures,binary-search-tree,C,Data Structures,Binary Search Tree,下面是我为验证BST而编写的代码 对吗?如果没有,我会怎么做 int validate(node *root) { if(root==NULL) return 1; else if(root->lchild!=NULL && (root->lchild)->data >=root->data) return 0; else if(root->rchild!=NULL && (root->rchild

下面是我为验证BST而编写的代码

对吗?如果没有,我会怎么做

int validate(node *root)
{
    if(root==NULL) return 1;
    else if(root->lchild!=NULL && (root->lchild)->data >=root->data) return 0;
    else if(root->rchild!=NULL && (root->rchild)->data <=root->data) return 0;
    validate(root->lchild);
    validate(root->rchild);
    return 1;
}
int验证(节点*根)
{
if(root==NULL)返回1;
否则如果(root->lchild!=NULL&&(root->lchild)->data>=root->data)返回0;
否则如果(root->rchild!=NULL&(root->rchild)->数据数据)返回0;
验证(root->lchild);
验证(root->rchild);
返回1;
}

假设您有以下树:

      20
     /  \
   10    30
  /
15
并从根开始使用代码:

1 int validate(node *root) {
2     if(root==NULL) return 1;
3     else if(root->lchild!=NULL && (root->lchild)->data >=root->data) return 0;
4     else if(root->rchild!=NULL && (root->rchild)->data <=root->data) return 0;
5     validate(root->lchild);
6     validate(root->rchild);
7     return 1;
8 }

您可能还需要考虑是否希望在树中重复值。如果您这样做,比较应该是
,而不是
=

假设您有以下树:

      20
     /  \
   10    30
  /
15
并从根开始使用代码:

1 int validate(node *root) {
2     if(root==NULL) return 1;
3     else if(root->lchild!=NULL && (root->lchild)->data >=root->data) return 0;
4     else if(root->rchild!=NULL && (root->rchild)->data <=root->data) return 0;
5     validate(root->lchild);
6     validate(root->rchild);
7     return 1;
8 }
您可能还需要考虑是否希望在树中重复值。如果这样做,比较应该是
,而不是
=

考虑树

    10
   /  \ 
 8    15
/ \   /
3  9 4 
在这个树中,到处都是
root->left->datadata
root->right->data>root->data

但是树不是BST,因为节点
4
不在正确的位置(它大于
10
,这是无效的)

如果必须验证BST,则应能够找出以下条件:

  • 左子树中的最大值<最小值为右子树
    • 考虑一下这棵树

          10
         /  \ 
       8    15
      / \   /
      3  9 4 
      
      在这个树中,到处都是
      root->left->datadata
      root->right->data>root->data

      但是树不是BST,因为节点
      4
      不在正确的位置(它大于
      10
      ,这是无效的)

      如果必须验证BST,则应能够找出以下条件:

      • 左子树中的最大值<最小值为右子树
      可能的副本