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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii

例:

输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]

解析:

递归,分成左子树和右子树两个子问题。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def generateTrees(self, n):""":type n: int:rtype: List[TreeNode]"""res = []  # 存放最终结果if n < 1:return reselse:return self.generateBST(1, n)def generateBST(self, start, end):res = []  # 存放临时子树if start > end:res.append(None)return reselse:for i in range(start, end + 1):# 左子树left_tree = self.generateBST(start, i - 1)  # 添加所有不同的左子树# 右子树right_tree = self.generateBST(i + 1, end)  # 添加所有不同的右子树for left in left_tree:for right in right_tree:  # 左右子树组合回到上一层的递归root = TreeNode(i)root.left = leftroot.right = rightres.append(root)return res  # 返回上一层递归的左/右子树结果

不同的二叉搜索树 IIPython解法相关推荐

  1. 有序链表转换二叉搜索树Python解法

    给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1. 来源:力扣(Lee ...

  2. 将有序数组转换为二叉搜索树Python解法

    给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树. 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树. 来源: ...

  3. 恢复二叉搜索树Python解法

    给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换.请在不改变其结构的情况下,恢复这棵树 . 来源:力扣(LeetCode) 链接:https://leetcode-cn.c ...

  4. 验证二叉搜索树Python解法

    给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数. 节点的右子树只包含 大于 当前节点的数. 所有左子树和右子 ...

  5. leetcode 1038. 从二叉搜索树到更大和树

    目录 题目描述: 示例: 解法: 题目描述: 给出二叉搜索树的根节点,该二叉树的节点值各不相同,修改二叉树,使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和. 提醒一下,二 ...

  6. gorm preload 搜索_LeetCode刷题笔记|95:不同的二叉搜索树 II

    题目描述 给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 . 示例 输入:3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null ...

  7. leetcode 98. 验证二叉搜索树 递归遍历左右子树和中序遍历 c语言解法

    如题: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是 ...

  8. 【超100%解法】剑指 Offer 33. 二叉搜索树的后序遍历序列

    立志用最少的代码做最高效的表达 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 示例 1: 输入: ...

  9. 【剑指Offer】23、二叉搜索树的后序遍历序列

      题目描述:   输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   解题思路:   对于后续遍历序列,序 ...

最新文章

  1. Java 构造方法与成员方法的区别
  2. 【CSS】【13】文字的排版
  3. Shell中创建序列和数组(list、array)的方法
  4. python字符串和List:索引值以 0 为开始值,-1 为从末尾的开始位置;值和位置的区别哦...
  5. spark的流失计算模型_使用spark对sparkify的流失预测
  6. 畅销书主编推出 MATLAB 春季班,限量优惠+送百G资料!
  7. Java 数组插入元素
  8. 程序员如何自我超越,教你一招
  9. SPOJ-New Distinct Substrings,注意会爆int
  10. mysql 额外内存池_MySQL探秘(三):InnoDB的内存结构和特性
  11. 二叉搜索树(二叉排序树)
  12. SQL2008 SP3下载
  13. P4778 Counting swaps (组合数学,打表推通项公式,OEIS)
  14. 用 UrlSchemes 实现调用应用并传参
  15. 使用双重循环实现五子棋游戏棋盘的绘制
  16. 外贸人如何快速学好英语
  17. 20款有趣的英文卡通免费字体
  18. 快速实战SQL (一) - 检索数据
  19. Mac 时间机器 Time Machine 备份速度太慢的解决方法 (加速备份命令)
  20. windows下测试磁盘读写(HD Tune)

热门文章

  1. 我的2020年度总结
  2. 如何在浏览器里开发并运行 SAP UI5 应用
  3. 关于 SAP Commerce Cloud 启动时报 Address already in use - bind 的错误消息
  4. 关于 SAP CloudFoundry 应用的 Resilience
  5. TypeScript class 的访问控制
  6. 如何从 SAP Fiori Elements List Report Table 点击事件响应函数里拿到表格某一行的信息
  7. SAP C4C Mashup port bindingF4帮助对话框里的数据源
  8. javax.ws.rs.Path注解@Path的工作原理解析
  9. SAP CRM WebClient UI Excel Export的运行时执行明细
  10. 阿里云Java虚拟机的安装位置