分治法。
分左右子树进行计算,但在计算时,有两点需要注意:
- 需要另外创建一个函数,它用来传递不能超过的最低值和不能超过的最高值;
- 但是还有一个特殊值需要排除,就是最大最小int本身。
C++代码:
/**
* 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 isValidBST(TreeNode *root) {
return valid(root, INT_MIN, INT_MAX);
}
bool valid(TreeNode *root, int min, int max) {
if (!root) {
return true;
}
if ((root->val <= min&&root->val!=INT_MIN) || (root->val >= max&&root->val!=INT_MAX)) {
return false;
}
return valid(root->left,min,root->val)&&valid(root->right,root->val,max);
}
};