C 如何验证二进制搜索树?
下面是我为验证BST而编写的代码 对吗?如果没有,我会怎么做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
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,则应能够找出以下条件:
- 左子树中的最大值<最小值为右子树