zoukankan      html  css  js  c++  java
  • Leetcode NO.98 Validate Binary Search Tree 验证二叉搜索树

    1.问题描述

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

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

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

    2.测试用例

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

    3.提示

    • 树中节点数目范围在[1, 104] 内
    • -231 <= Node.val <= 231 - 1

    4.代码

    节点信息
    public class TreeNode {
        public int val;
        public TreeNode left;
        public TreeNode right;
    
    
        public TreeNode(int val) {
            this.val = val;
        }
    
        public TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
    
    1.基于前序遍历思路
    code
    public boolean isValidBSTWithPre(TreeNode root) {
        if (root == null) {
            return true;
        }
        return isValidBst(root, null, null);
    }
    
    private boolean isValidBst(TreeNode root, Integer lower, Integer upper) {
        if (root == null) {
            return true;
        }
        if (lower != null && root.val <= lower) {
            return false;
        }
        if (upper != null && root.val >= upper) {
            return false;
        }
        return isValidBst(root.left, lower, root.val) && isValidBst(root.right, root.val, upper);
    }
    
    复杂度
    * 时间复杂度:O(n)
    * 空间复杂度:O(logn)
    
    2.基于中序遍历思路
    code
    ArrayList<Integer> res = new ArrayList<Integer>();
    
    public boolean isValidBSTWithIn(TreeNode root) {
        if (root == null) {
            return true;
        }
        inOrder(root);
        for (int i = 1; i < res.size(); i++) {
            if (res.get(i) <= res.get(i - 1)) {
                return false;
            }
        }
        return true;
    }
    
    private void inOrder(TreeNode node) {
        if (node == null) {
            return;
        }
        inOrder(node.left);
        res.add(node.val);
        inOrder(node.right);
    }
    
    复杂度
    * 时间复杂度:O(n)
    * 空间复杂度:O(n)
    
  • 相关阅读:
    excel unixtime与北京时间互转
    vim的漫漫长征路
    const常量
    第一章:绪论
    2.4奇偶校验
    2.3数据校验的基本原理
    2.2定点与浮点数据表示
    2.1机器数及其特点
    1.2计算机系统性能评价
    冯诺依曼结构原理及层次分析
  • 原文地址:https://www.cnblogs.com/worldline/p/15737242.html
Copyright © 2011-2022 走看看