驗證二叉查詢樹—LintCode
阿新 • • 發佈:2019-02-13
描述:
給定一個二叉樹,判斷它是否是合法的二叉查詢樹(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;
}
};