验证二叉搜索树
前言
本文的内容是我刷题时遇到的比较好的解题思路,特意记下来,并添加一些自己的思考,方便以后回顾学习。大家有兴趣的可以去看看“代码随想录”。
题目内容
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效二叉搜索树定义如下:
- 节点的左子树只包含小于当前节点的数。
- 节点的左子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
解题思路
递归法
该题得用中序遍历
1.确定递归函数的参数和返回类型
- 返回类型:该题是验证,递归函数需要返回值,可以用bool类型来表示
- 参数:需要二叉树的根节点
2.确定终止条件
- 如果该节点为空,也可以是二叉搜索树
代码如下:
if (root == NULL) return true;
3.确定单层递归的逻辑
- 把前一个节点放在pre中,只有pre->val < root->val时才返回true。
class Solution {
public:
TreeNode* pre = NULL; //用来记录前一个节点
bool isValidBST(TreeNode* root) {
if (root == NULL)
return true;
bool left = isValidBST(root->left);
if(pre != NULL && pre->val >= root->val)
return false;
pre = root;
bool right = isValidBST(root->right);
return left && right;
}
};