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
    
        }
    
    }
  • 相关阅读:
    Matlab随笔之三维图形绘制
    Matlab随笔之模拟退火算法
    Matlab随笔之矩阵入门知识
    Matlab随笔之求解线性方程
    Matlab随笔之分段线性函数化为线性规划
    Matlab随笔之指派问题的整数规划
    Matlab随笔之线性规划
    Android单位转换 (px、dp、sp之间的转换工具类)
    Android禁止输入表情符号
    设计模式之策略模式
  • 原文地址:https://www.cnblogs.com/null00/p/5116903.html
Copyright © 2011-2022 走看看