思路:
首先,根据二叉搜索树的性质,左子树的所有结点值都比 根结点的值小 右子树的所有结点值都比 根结点的值大
所以看见二叉搜索树首先可以考虑中序遍历,这样遍历的元素值是逐渐递增的。
在这里,使用一个结点,保存之前的结点,可以和现在的结点进行比较。
如果 pre->val >= root->val 返回 false
注意,这里需要判断 pre 是否为空。也就是在第一个结点的时候,是没有前面一个结点可以比较的。pre 的 值为空。所以不需要判断。
很巧妙!!!!!!!!!
class Solution {
public:
TreeNode* pre = nullptr;
bool isValidBST(TreeNode* root) {
if(root == nullptr)
return true;
// 左
bool left = isValidBST(root->left);
if(pre != nullptr && pre->val >= root->val) // 中
return false;
pre = root;
bool right = isValidBST(root->right); // 右
return left && right;
}
};