zoukankan      html  css  js  c++  java
  • 力扣 98. 验证二叉搜索树

    98. 验证二叉搜索树

    题目内容

    给定一个二叉树,判断其是否是一个有效的二叉搜索树。
    
    假设一个二叉搜索树具有如下特征:
    
    节点的左子树只包含小于当前节点的数。
    节点的右子树只包含大于当前节点的数。
    所有左子树和右子树自身必须也是二叉搜索树。
    
    Example:
    输入:
        2
       / 
      1   3
    输出: true
    示例 2:
    
    输入:
        5
       / 
      1   4
         / 
        3   6
    输出: false
    解释: 输入为: [5,1,4,null,null,3,6]。
         根节点的值为 5 ,但是其右子节点值为 4 。
    

    分析过程

    • 核心问题:左子树的右子树需要比根节点小 ,右子树的左子树需要比根节点大
    • 解决办法:两个值,一个表示根节点的值,一个表示当前节点值就好了。

    解决树的问题的一般方法是

    • 把问题分成左子树问题和右子树问题,如果左右两个问题是同纬度的问题则可以用一个函数来解决,如果不是同一个维度的问题,则要将两个问题分开来处理。
    • 找子树和根的规律,方法是总结当前点和其他节点的规律,并把规律写出来!! (一般在脑子中想很可能找不到规律,写下来很有帮助)。
    • 找到合适的方法来展示这个规律。

    代码实现

    /**
     * Definition for a binary tree node.
     * public 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;
     *     }
     * }
     */
    class Solution {
        public boolean isValidBST(TreeNode root) {
            if (root == null) {
                return true;
            }
            return checkBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
        }
    
        private boolean checkBST(TreeNode root, Long left, Long right) {
            if (root == null) {
                return true;
            }
            if (root.val < right && root.val > left) {
                return checkBST(root.left, left, Long.valueOf(root.val)) && checkBST(root.right, Long.valueOf(root.val), right);
            }
            return false;
    
        }
    }
    

    效率提高

    拓展问题

  • 相关阅读:
    2-10 案例4:像素读取写入
    2-8 案例3:不同图片质量保存
    2-7 案例2:图片写入
    Linux文件操作实用笔记
    Linux文件操作实用笔记
    Linux 文件系统基础
    Linux 文件系统基础
    一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等...
    一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等...
    30 个与程序猿有关的成语
  • 原文地址:https://www.cnblogs.com/clnsx/p/14075980.html
Copyright © 2011-2022 走看看