您的位置:首页 > 其它

验证二叉查找树—LintCode

2017-10-12 17:22 357 查看
描述:

给定一个二叉树,判断它是否是合法的二叉查找树(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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: