这道题思路很简单嘛,就是递归,只要一个结点没有满足大于左子结点和小于右子结点就false
有一些细节值得注意:
一是不能写root->right->val,草,这样的话我们只能在递归函数里多加两个变量了。。
二是这玩意儿需要long变量(因为它实例有很大的)
三是root==NULL时,跑了12ms,而为nullptr时只跑了4
ms,就离谱。。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool dfs(TreeNode* root,long lower,long higher){
if(root==NULL)return true;
if(root->val<=lower||root->val>=higher)return false;
return dfs(root->left,lower,root->val)&&dfs(root->right,root->val,higher);
}
bool isValidBST(TreeNode* root) {
return dfs(root,LONG_MIN,LONG_MAX);
}
};