二叉搜索树
判断是否左子树都小于根节点都小于右子树
判断当前三个结点大小,递归
bool IsSubtreeLesser(Node* root, int value) {
if(root==NULL) return true;
if (root->data <= value)
return true;
return false;
}
bool IsSubtreeGreater(Node* root, int value) {
if(root==NULL) return true;
if (root->data >= value)
return true;
return false;
}
对比一下,
bool IsSubtreeLesser(Node* root, int value) {
if(root==NULL) return true;
if (root->data <= value && IsSubtreeLesser(root->left, value)
&& IsSubtreeGreater(root->right, value))
return true;
return false;
}
bool IsSubtreeGreater(Node* root, int value) {
if(root==NULL) return true;
if (root->data >= value&&IsSubtreeLesser(root->left, value)
&& IsSubtreeGreater(root->right, value))
return true;
return false;
}
上面情况是只进行该结点的比较,而下面情况是在比较的时候就进行了递归.上面只能保证在三个结点里的大小顺序,而下面的可以保证该结点以下都是二叉搜索树。
bool IsBinarySearchTree(Node* root) {
if (root == NULL)
return true;
if (IsSubtreeLesser(root->left, root->data)
&& IsSubtreeGreater(root->right, root->data)
&& IsBinarySearchTree(root->left)
&& IsBinarySearchTree(root->right))
return true;
return false;
}
或者,
在代码中,我们记录最大最小值,即结点值的范围区间。
bool IsBinarySearchTree(Node* root,int minValue,int maxValue) {
if (root == NULL)
return true;
if (root->data>=minValue
&&root->data<= maxValue
&& IsBinarySearchTree(root->left,minValue,root->data)
&& IsBinarySearchTree(root->right,root->data,maxValue))
return true;
return false;
}