zoukankan      html  css  js  c++  java
  • 【每日一题-leetcode】98.验证二叉搜索树

    98.验证二叉搜索树

    1. 验证二叉搜索树

    难度中等513

    给定一个二叉树,判断其是否是一个有效的二叉搜索树。

    假设一个二叉搜索树具有如下特征:

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

    示例 1:

    输入:
        2
       / 
      1   3
    输出: true
    

    示例 2:

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

    1.中序遍历

    		//inoder 遍历的结果就是一个有序的对于BST来说,
            //因此 我们借助stack 左一次inorder 记录每一次的当前值和下一个值比较 
            //如果下一个值小于上一个值 说明 不是BST。否则就是
            //因此 先迭代左子节点 在迭代右子节点
            //time : O(n) 每一个节点有且仅被访问一次
            //space : O(n) 借助一个stack结构存储节点。
            public boolean isValidBST(TreeNode root) {
                Stack<TreeNode> stack = new Stack<>();
                double minValue = -Double.MAX_VALUE;
        
                while(!stack.isEmpty() || root != null){
                    while(root!=null){
                        stack.push(root);
                        root = root.left;//递归左子节点
                    }
        
                    root = stack.pop();
        
                    if(root.val <= minValue) return false; //如果小于最小值 非BST
                    minValue = root.val;
                    root = root.right;//递归右子节点
                }
                return true;
            }
    

    2.递归

    time:o(n)

      		//递归 
            //主要思路 就是通过递归查找根节点的左子树的最大值是否大于根节点
            //或者根节点的右子树的最小值是否小于根节点。
            public boolean isValidBST(TreeNode root) {
                return isValid(root,null,null);
            }
        
            public boolean isValid(TreeNode root,Integer min,Integer max){
                //如果根节点为null 返回true
                if(root == null)  return true;
                if(min != null && root.val <= min) return false;
                if(max != null && root.val >= max) return false;
        
                return isValid(root.left,min,root.val) && isValid(root.right,root.val,max);
            }
    
  • 相关阅读:
    五一拆装机学习
    msgbox函数和inputbox函数应该注意的几点
    西游记(3)
    刚刚开通csdn
    c# 快捷键
    JavaBean的属性(Simple,Indexed,Bound,Constrained)【收藏】
    SQL查询语句使用【收藏】
    .NET 对实现IPersistStream接口的对象进行保存和读取
    创建控件数组
    常用数据库JDBC连接写法【收藏】
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860634.html
Copyright © 2011-2022 走看看