zoukankan      html  css  js  c++  java
  • LeetCode

    题目:

    Given a binary tree, determine if it is a valid binary search tree (BST).

    Assume a BST is defined as follows:

    • The left subtree of a node contains only nodes with keys less than the node's key.
    • The right subtree of a node contains only nodes with keys greater than the node's key.
    • Both the left and right subtrees must also be binary search trees.

    思路:

    1) 递归,两边夹

    package bst;
    
    public class ValidateBinarySearchTree {
    
        public boolean isValidBST(TreeNode root) {
            return isValidBST(root, false, Integer.MIN_VALUE, false, Integer.MAX_VALUE);
        }
        
        private boolean isValidBST(TreeNode root, boolean reachMin, int min, boolean reachMax, int max) {
            if (root == null) return true;
            int value = root.val;
            if (value < min || value > max) return false;
            
            if (!reachMin && value == Integer.MIN_VALUE) {
                if (root.left != null) return false;
                return isValidBST(root.right, true, value, reachMax, max);            
            } else if (!reachMax && value == Integer.MAX_VALUE) {
                if (root.right != null) return false;            
                return isValidBST(root.left, reachMin, min, true, value);
            } else if (value > min && value < max) { 
                return isValidBST(root.left, reachMin, min, reachMax, value) && 
                        isValidBST(root.right, reachMin, value, reachMax, max);        
            }
            
            return false;
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
        }
    
    }

    2) 类似于中序遍历

    package bst;
    
    public class ValidateBinarySearchTree {
    
        private boolean firstNode = true;
        
        private int lastValue = 0;
        
        public boolean isValidBST(TreeNode root) {
            if (root == null) return true;
            if (!isValidBST(root.left)) return false;
            
            if (!firstNode && root.val <= lastValue) return false;
            firstNode = false;
            lastValue = root.val;
            
            if (!isValidBST(root.right)) return false;
            
            return true;
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
        }
    
    }
  • 相关阅读:
    Xshell连接virtualbox下的fedora虚拟机
    异常:java.sql.SQLIntegrityConstraintViolationException: Column 'category' cannot be null
    JQuery中获取表中的数据
    关于springboot报错:新建springboot项目报错:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    IDEA设置
    java基础总结
    JavaWeb----Servler
    IDEA2020版使用
    Java面向对象
    【CMU 6.824】 RPC & Threads
  • 原文地址:https://www.cnblogs.com/null00/p/5116903.html
Copyright © 2011-2022 走看看