前言
我正在刷卡哥的“代码随想录”,自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
代码随想录此题链接
题目
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
1.二叉搜索树中序遍历特性介绍
二叉搜索树中序遍历是所有节点为递增顺序。
全局变量
maxValue 当前value的最大值
2. 本题思路分析:(中序遍历)
此题可以使用递归遍历,
三部曲:
-
第一步确定参数和返回值
参数:当前节点
返回值:boolean值 -
第二步截止递归的条件
因为null节点也是二叉搜索树,所以返回true; -
第三步单层递归逻辑
中序遍历,先递归左孩子给左边的boolean值;
当前maxValue为null或者当前节点的值大于maxValue的值;则用当前值覆盖maxValue,否则说明就不是二叉搜索树。
3. 算法实现
class Solution {
//前序遍历
TreeNode maxTree;
public boolean isValidBST(TreeNode root) {
//特殊情况
if(root == null){
return true;
}
boolean left = isValidBST(root.left);
if(maxTree == null || root.val > maxTree.val){
maxTree = root;
}else{
return false;
}
boolean right = isValidBST(root.right);
return left && right;
}
}
4. 算法复杂度
暂无
5. 算法坑点
暂无