首先要明白二叉搜索树如果按照中序遍历存放在数组就是呈现递增的形式。
所以该题的框架一定是基于中序遍历的形式。
但我最开始写的时候忽略了一个点,
if(root->left->val>=root->val){return false;}
if(root->right->val<=root->val){return false;}
这样每个二叉树单独看都可以满足,但可能存在这种情况,右子树中有比根节点小的节点。
看来卡哥的解析后,知道了要定义一个全局变量,遍历的时候不断更新,因为如果是二叉搜索树,按照中序遍历的逻辑,前一个数肯定比后一个数小。
如果不满足就return false;
点击查看代码
class Solution {
public:
long long m_max=LONG_MIN;
bool isValidBST(TreeNode* root) {
if(!root){return true;}
bool leftflag=isValidBST(root->left);
if(root->val>m_max){
m_max=root->val;
}
else{return false;}
bool rightflag=isValidBST(root->right);
return leftflag&&rightflag;
}
};