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
    
        }
    
    }
  • 相关阅读:
    prometheus 基于文件的目标发现
    prometheus rules
    consul kv使用介绍
    prometheus 标签使用
    prometheus 配置容器 cadvisor监控节点
    prometheus 配置介绍
    Ubuntu 13.10 录音有特别大噪音解决办法
    Ubuntu 13.10 解决虚拟机摄像头无法使用问题
    Ubuntu 13.10 安装软件失败后出现的问题——已安装 post-installation 脚本 返回了错误号 1
    Ubuntu 13.04 VirtualBox在工作区中的切换
  • 原文地址:https://www.cnblogs.com/null00/p/5116903.html
Copyright © 2011-2022 走看看