95.不同的二叉搜索树Ⅱ python

不同的二叉搜索树Ⅱ

题目

题目描述

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

示例 1:

输入:n = 3

输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]

示例 2:

输入:n = 1

输出:[[1]]

提示:

1 <= n <= 8

题解

为了生成所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同二叉搜索树(BST),我们可以使用递归和回溯的方法。这个问题可以通过递归地选择每个可能的根节点,然后分别构建左子树和右子树来解决。

解题思路

对于范围 [1, n] 中的每一个数 i,我们可以把它作为当前树的根节点,那么:

  • 所有可能的左子树是通过递归调用 [1, i-1] 获得的。
  • 所有可能的右子树是通过递归调用 [i+1, n] 获得的。

我们将这两个结果集合并,并将每一对左子树和右子树与当前根节点组合起来,形成一个完整的二叉搜索树。

Python 实现代码

首先,定义一个辅助函数来生成指定范围内所有可能的二叉搜索树。然后,在主函数中调用这个辅助函数并传入初始参数。

python 复制代码
def generateTrees(n: int):
    if n == 0:
        return []
    
    def generate_trees(start, end):
        if start > end:
            return [None,]
        
        all_trees = []
        for i in range(start, end + 1):  # 尝试每个数字作为根节点
            # 获取所有可能的左子树
            for left in generate_trees(start, i - 1):
                # 获取所有可能的右子树
                for right in generate_trees(i + 1, end):
                    # 创建当前树并加入到列表
                    current_tree = TreeNode(i)
                    current_tree.left = left
                    current_tree.right = right
                    all_trees.append(current_tree)
        
        return all_trees
    
    return generate_trees(1, n)

注意事项

  • n = 0 时,没有节点可以用来构建树,因此返回空列表。
  • 使用了深度优先搜索(DFS)的思想,通过递归来遍历所有可能性。
  • 该算法的时间复杂度较高,因为对于每一个节点都要考虑它作为根节点的情况,并递归处理其左右子树。但是由于题目限制了 1 <= n <= 8,这种方法在实际应用中是可行的。

提交结果

相关推荐
查理零世4 分钟前
【算法】数论基础——约数个数定理、约数和定理 python
python·算法·数论
Eiceblue1 小时前
Python 合并 Excel 单元格
开发语言·vscode·python·pycharm·excel
好评笔记1 小时前
多模态论文笔记——ViViT
论文阅读·深度学习·机器学习·计算机视觉·面试·aigc·transformer
汉克老师2 小时前
GESP2024年3月认证C++六级( 第三部分编程题(1)游戏)
c++·学习·算法·游戏·动态规划·gesp6级
闻缺陷则喜何志丹2 小时前
【C++图论】2685. 统计完全连通分量的数量|1769
c++·算法·力扣·图论·数量·完全·连通分量
利刃大大2 小时前
【二叉树深搜】二叉搜索树中第K小的元素 && 二叉树的所有路径
c++·算法·二叉树·深度优先·dfs
CaptainDrake2 小时前
力扣 Hot 100 题解 (js版)更新ing
javascript·算法·leetcode
SomeB1oody2 小时前
【Rust自学】15.2. Deref trait Pt.1:什么是Deref、解引用运算符*与实现Deref trait
开发语言·后端·rust
一缕叶2 小时前
洛谷P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数
算法·蓝桥杯
甜甜向上呀3 小时前
【数据结构】空间复杂度
数据结构·算法