IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 95. 不同的二叉搜索树 II -> 正文阅读

[数据结构与算法]95. 不同的二叉搜索树 II

95. 不同的二叉搜索树 II

原始题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/

给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。

在这里插入图片描述

解题思路:

回溯法,定义一个函数:G(s, e)函数表示当前值的集合为[start,end],返回序列[start,end]生成的所有可行的二叉搜索树,枚举 [start,end] 中的值 i
为当前二叉搜索树的根,序列就被i分成了左右2部分(start,i-1)(i+1,end),然后递归调用这两部分,获得以i为根的左右两个子二叉树搜索树的结果集合,再从左右两个结果集合中分别抽出一个结果进行拼接,形成当前i为根的所有二叉搜索树的结果。具体实现看代码及注释。

代码实现:

# 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[TreeNode]:
        # 定义一个函数:G(s, e)
        # 函数表示当前值的集合为[start,end],返回序列[start,end] 生成的所有可行的二叉搜索树
        def G(s, e):
            # 如果s 大于 e,不满足二叉搜索树的条件,返回空树
            if s > e:
                return [None, ]
            res = []

            # 遍历s到e的每一个节点,作为根节点
            for i in range(s, e + 1):

                # 递归调用左子树,获取结果
                left = G(s, i - 1)
                # 递归调用右子树,获取结果
                right = G(i + 1, e)

                # 从左右子树的结果中,各找出一棵树和当前节点i进行拼接,组成一个结果
                for l in left:
                    for r in right:
                        t = TreeNode(i)
                        t.left = l
                        t.right = r
                        res.append(t)
            return res

        return G(1, n) if n else []

参考文献:
https://leetcode-cn.com/problems/unique-binary-search-trees-ii/solution/bu-tong-de-er-cha-sou-suo-shu-ii-by-leetcode-solut/

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:52:03  更:2021-11-19 17:54:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:15:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码