• LeetCode "Largest BST Subtree"


    A typical recursion use:

    class Solution(object):
        max_size = 0
    
        # return: isValid, minVal, maxVal, nodeCnt
        def go(self, root):
            if root.left is None and root.right is None:
                #print (root.val, True, root.val, root.val, 1)
                self.max_size = max(self.max_size, 1)
                return True, root.val, root.val, 1
            leftOk = rightOk = True
            leftMin = leftMax = rightMin = rightMax = root.val
            leftCnt = rightCnt = 0
            if root.left:
                leftValid, leftMin, leftMax, leftCnt = self.go(root.left)
                leftOk = leftValid and leftMax < root.val
            if root.right:
                rightValid, rightMin, rightMax, rightCnt = self.go(root.right)
                rightOk = rightValid and rightMin > root.val
    
            if leftOk and rightOk:
                self.max_size = max(self.max_size, leftCnt + rightCnt + 1)
            #print (root.val, leftOk and rightOk, leftMin, rightMax, leftCnt + rightCnt + 1)
            return leftOk and rightOk, leftMin, rightMax, leftCnt + rightCnt + 1
    
        def largestBSTSubtree(self, root):
            if root is None: return self.max_size
            self.go(root)
            return self.max_size
  • 相关阅读:
    Struts22222
    Struts2
    Java事务的概念
    Java设计模式之单例模式
    Spring的大框架
    mybatis大框架
    springmvc和spring的区别
    JavaScript-原型&原型链&原型继承&组合函数
    美丽的CSS图形和HTML5
    易买网项目的总实现超级详解
  • 原文地址:https://www.cnblogs.com/tonix/p/5187027.html
Copyright © 2020-2023  润新知