zoukankan      html  css  js  c++  java
  • 验证二叉查找树 · Validate Binary Search Tree

    [抄题]:

    [思维问题]:

    不知道要定义resultType, 其实用仔细分析判断条件就行了:是否是bst+最大最小值

    类似于平衡二叉树:是否平衡+左右的高度差

    [一句话思路]:

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    1-1也不是。所以left.max >= root.val也不行

    [画图]:

    [一刷]:

    1. 空节点可以认为是平衡二叉树
    2. 只有在root.left非空,并且直接拿left.max比root的取val大时,才能否定
    3. 最后可以直接返回left.min, right.max

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

    [总结]:

    定义结构-helper方法-(边界条件-不符合的情况-符合的情况)-调用helper方法

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构,为什么不用别的数据结构]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

    BST中出现最多的元素:中序遍历,然后计数统计

    public class Solution {
        /**
         * @param root: The root of binary tree.
         * @return: True if the binary tree is BST, or false
         */
        public boolean isValidBST(TreeNode root) {
            ResultType r = validateHelper(root);
            return r.is_bst;
        }
        
        private ResultType validateHelper(TreeNode root) {
            if (root == null) {
                return new ResultType(true, Integer.MIN_VALUE, Integer.MAX_VALUE);
            }
            
            ResultType left = validateHelper(root.left);
            ResultType right = validateHelper(root.right);
            
            if (!left.is_bst || !right.is_bst) {
                // if is_bst is false then minValue and maxValue are useless
                return new ResultType(false, 0, 0);
            }
            
            if (root.left != null && left.maxValue >= root.val || 
                  root.right != null && right.minValue <= root.val) {
                return new ResultType(false, 0, 0);
            }
            
            return new ResultType(true,
                                  Math.max(root.val, right.maxValue),
                                  Math.min(root.val, left.minValue));
        }
    }
    View Code

     也可以不定义resulttype 不用这种奇葩思路。直接在isvalidate函数中定义节点为空或者大小不对就行了

  • 相关阅读:
    RESTful-rest_framework版本控制、分页器-第六篇
    RESTful-rest_framework认证组件、权限组件、频率组件-第五篇
    RESTful-rest_framework视图层-第三篇
    RESTful-rest_framework应用第二篇(get、post的序列化与反序列化)
    RESTful-rest_framework应用第一篇
    Flask
    驱动程序分层分离概念_总线驱动设备模型_P
    (转)linux设备驱动之USB数据传输分析 二
    (转)linux设备驱动之USB数据传输分析 一
    USB设备驱动程序(二)
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8378410.html
Copyright © 2011-2022 走看看