zoukankan      html  css  js  c++  java
  • 333. Largest BST Subtree

    package LeetCode_333
    
    import main.TreeNode
    
    /**
     * 333. Largest BST Subtree
     * Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest means subtree with largest number of nodes in it.
    Note:
    A subtree must include all of its descendants.
    
    Example:
    Input: [10,5,15,1,8,null,7]
    10
    /  
    5   15
    /    
    1   8   7
    Output: 3
    Explanation: The Largest BST Subtree in this case is the highlighted one (5,1,8).
    The return value is the subtree's size, which is 3.
    
    Follow up:
    Can you figure out ways to solve it with O(n) time complexity?
     * */
    class Solution {
        /*
        * solution: recursion, Time complexity:O(n*n), Space complexity:O(n)
        * */
        fun largestSubTree(root: TreeNode?): Int {
            if (root == null) {
                return 0
            }
            if (isBST(root, null, null)) {
                return count(root)
            }
            return Math.max(largestSubTree(root.left), largestSubTree(root.right))
        }
    
        private fun isBST(root: TreeNode?, min: Int?, max: Int?): Boolean {
            if (root == null) {
                return true
            }
            if (min != null && min > root.`val` || max != null && max < root.`val`) {
                return false
            }
            return isBST(root.left, min, root.`val`) && isBST(root.right, root.`val`, max)
        }
    
        private fun count(root: TreeNode?): Int {
            if (root == null) {
                return 0
            }
            return count(root.left) + count(root.right) + 1
        }
    }
  • 相关阅读:
    【Vijos1159】岳麓山上打水 [迭代加深]
    【POJ3134】 Power Calculus [迭代加深]
    【2019.1.24】 搜索,动规 经典题目体验赛
    【noip2017】
    【poj3311】Hie With The Pie [状压dp]
    [bzoj3938] [Uoj #88] Robot
    [洛谷P4707] 重返现世
    [洛谷P4097] [HEOI2013] Segment
    KD-tree 学习小记
    NOI2019 酱油记
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13044463.html
Copyright © 2011-2022 走看看