【算法训练】LeetCode#98 验证二叉搜索树

一、描述

98. 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:root = [2,1,3]
输出:true

示例 2:

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是  。

二、思路

这道题与其他二叉树类型题类似,其实就是在遍历的同时判断子树大小而已。

哦,想错了,每个节点的所有右侧节点都应该大于他本身,所有左侧节点都应该小于他本身,我刚开始仅考虑到了当前层。

三、解题

public static class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode() {}
    TreeNode(int val) { this.val = val; }
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
public static class Solution {
    public boolean isValidBST(TreeNode root) {
        return process(root,Long.MIN_VALUE,Long.MAX_VALUE);
    }

    // 对于左子树而言,需要考虑其是否大于根节点,对于右子树,考虑其是否小于根节点
    public boolean process(TreeNode node, long minVal, long maxVal){
        if (node == null){
            return true;
        }
        if (node.val <= minVal || node.val >= maxVal){
            return false;
        }
        return process(node.left,minVal,node.val) && process(node.right,node.val,maxVal);
    }
}
posted @ 2023-01-10 14:32  小拳头呀  阅读(14)  评论(0编辑  收藏  举报