首页 > 其他分享 >leetcode -- tree 4

leetcode -- tree 4

时间:2022-10-02 19:00:46浏览次数:49  
标签:return val -- self tree TreeNode root leetcode def

  1. 不同的二叉搜索树 II
递归
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def generateTrees(self, n: int) -> List[Optional[TreeNode]]:
        def generate(start: int, end: int) -> List[TreeNode]:
            if start > end:
                return [None, ]
            
            allTrees = []

            for i in range(start, end +1):
                leftTrees = generate(start, i - 1)
                rightTrees = generate(i + 1, end)
            
                for l in leftTrees:
                    for r in rightTrees:
                        curnode = TreeNode(i)
                        curnode.left = l
                        curnode.right = r
                        allTrees.append(curnode)

            return allTrees
        
        return generate(1, n) if n else []


  1. 不同的二叉搜索树
动态规划 + 数学方法
class Solution:
    def numTrees(self, n: int) -> int:
        # G(n) == 上界为 n 时 可以构建的二叉搜索树
        G = [0] * (n + 1)
        G[0], G[1] = 1, 1
        for i in range(2, n + 1):
            for j in range(1, n + 1):
                G[i] += G[j - 1] * G[i - j]

        return G[n] 

# 卡兰塔数
        G = 1
        for i in range(0, n):
            G = 2*(2*i + 1) / (i + 2) * G

        return int(G)
  1. 验证二叉搜索树
递归 + 迭代
# 递归方法 -- 每次传入下层 需要将上层传下来的upper或lower传下去继续进行比较
class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        def helper(node: Optional[TreeNode], lower = float('-inf'), upper = float('inf')) -> bool:
            if not node:
                return True
            val = node.val

            if val <= lower or val >= upper:
                return False
            
            if not helper(node.left, lower, val):
                return False
            
            if not helper(node.right, val, upper):
                return False

            return True

        return helper(root)
        
# 迭代写法
class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        stack, inorder = [], float('-inf')

        while stack or root:
            while root:
                stack.append(root) 
                root = root.left
            root = stack.pop()

            if inorder >= root.val:
                return False

            inorder = root.val
            root = root.right
        
        return True
        

标签:return,val,--,self,tree,TreeNode,root,leetcode,def
From: https://www.cnblogs.com/DocGu/p/16749236.html

相关文章

  • 主库新添加数据文件后 备库修改数据文件路径——备库OMF管理方式
    文档课题:备库db_create_file_dest和db_file_name_convert&log_file_name_convert同时存在,主库添加数据文件后会按照omf的路径生成数据文件,如何将新添加的数据文件路径修改到......
  • test
    [root@localhostshell]#catserver_install.sh#!/bin/bashset-euxopipefail#set+e暂时关闭,set-e重新打开#部署类型:1平台,2终端,3,一体机Deploymen_type=$1......
  • Linux进阶(三)
    目录架构图IPtables简介防火墙的分类包过滤防火墙Iptables如何过滤“四表”“五链”Iptables流程架构图IPtables简介IPtablesLinux防火墙工具,真正实现防火墙功能......
  • GMT画矢量和椭圆笔记
    GMT画矢量和椭圆笔记plot是GMT最常用的画图模块之一,输入数据的格式是x坐标y坐标方位角长度#画矢量时-SV选项对应的输入数据x坐标y坐标长轴方位角长轴长度短轴长......
  • 一万了解 Gateway 知识点
    1.什么是网关API网关是一个搭建在客户端和微服务之间的服务,我们可以在API网关中处理一些非业务功能的逻辑,例如权限验证、监控、缓存、请求路由等。网关的核心作用就......
  • [挑战记录]AKIOI
    \(20220607~\mathcal{AK}\times7\)\(20220929~\mathcal{AK}\times13\)\(20221002~\mathcal{AK}\times20\)......
  • 2022-2023-1 20221409 《计算机基础与程序设计》第五周学习总结
    2022-2023-120221409《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在......
  • 面试必备:ThreadLocal详解
    前言大家好,我是捡田螺的小男孩。无论是工作还是面试,我们都会跟ThreadLocal打交道,今天就跟大家聊聊ThreadLocal哈~ThreadLocal是什么?为什么要使用ThreadLocal一个Thre......
  • java---数组的学习
    数组数组是最简单的数据结构//无论定义什么都满足变量类型变量的名字=变量的值;int[]num;num=newint[10];//等同于下方写法int[]num=newint[10];一.数组的......
  • Docker服务搭建个人音乐播放器Koel
    Koel简介Koel是一种简单的基于Web的个人音频流服务,用客户端的Vue和服务器端的Laravel编写。针对Web开发人员,Koel采用了一些更现代的Web技术来完成其工作搭建步骤doc......