描述:
给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
节点的左子树中的值要严格小于该节点的值。
节点的右子树中的值要严格大于该节点的值。
左右子树也必须是二叉查找树。
一个节点的树也是二叉查找树。
ac代码:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
bool comp1(TreeNode *root, int k)
{
if(root==NULL)
return true;
if(root->val>=k)
return false;
return comp1(root->left,k)&comp1(root->right,k);
}
bool comp2(TreeNode *root, int k)
{
if(root==NULL)
return true;
if(root->val<=k)
return false;
return comp2(root->left,k)&comp2(root->right,k);
}
bool isValidBST(TreeNode * root) {
// write your code here
if(root==NULL)
return true;
if(root->left==NULL&&root->right==NULL)
return true;
bool a=true,b=true;
if(!comp1(root->left,root->val))
return false;
else
a= isValidBST(root->left);
if(!comp2(root->right,root->val))
return false;
else
b= isValidBST(root->right);
return a&b;
}
};