跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode:98.验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左
子树
只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
二叉搜索树在中序遍历的时候是一个有序的,利用这个特性可以使用中序遍历,然后在遍历的过程中通过双指针来判断前一个节点和当前节点的值,如果前一个节点的值大于或等于当前节点的值则返回false
TreeNode pre = null;
public boolean isValidBST(TreeNode root) {
if (root == null)
return true;
// 左
boolean left = isValidBST(root.left);
if (pre != null && pre.val >= root.val)
return false;
pre = root;
// 右
boolean right = isValidBST(root.right);
return left && right;
}