95. 不同的二叉搜索树 II
创始人
2024-05-23 16:22:41
0

95. 不同的二叉搜索树 II

    • 题目
    • 算法设计:深度优先搜索

 


题目

传送门:https://leetcode.cn/problems/unique-binary-search-trees-ii/


 


算法设计:深度优先搜索

二叉树子问题分解 = 根节点 + 左右子树的子问题。

根节点的子问题:循环历遍每一个元素,以这个元素作为根节点。

左子树的子问题:左子树的所有可行的集合。

右子树的子问题:右子树的所有可行的集合。

分析过程:

  • 二叉搜索树关键的性质是,根节点的值大于左子树所有节点的值,小于右子树所有节点的值,且左子树和右子树也同样为二叉搜索树。
  • 题目数据 [1, n] 是一个单调递增序列。
  • 那以 i 作为根节点,那比它小的元素 [1, i-1] 就只能是属于它的左子树,比它大的节点 [i+1, n]只能是属于它的右子树。
  • 比如 n=5,i=3n = 5,i = 3n=5,i=3,根据二叉搜索树性质,左子树节点就是 {1,2} 的组合,右子树就是 {4,5} 的组合。
  • 3 为根节点的二叉搜索树数量 = 左子树的所有可行的集合 * 右子树的所有可行的集合。
  • n 的所有二叉搜索树数量 = 以 1 为根节点的二叉搜索树数量 + 以 2 为根节点的二叉搜索树数量 + 以 3 为根节点的二叉搜索树数量 + 以 4 为根节点的二叉搜索树数量 + 以 5 为根节点的二叉搜索树数量
class Solution {
public:vector dfs(int start, int end) {vector res;if (start > end) return {NULL};                    // 空树for (int i = start; i <= end; i++) {               // 枚举每个 i 为根节点vector left = dfs(start, i-1), right = dfs(i+1, end);  // 以i作为根节点,那比它小的元素[1, i-1]就只能是它的左子树,比它大的节点[i+1, n]只能是它的右子树。再递归调用,得出所有可行的左子树和可行的右子树。for (auto l : left)                            // 从可行左子树集合中选一棵for (auto r : right)                       // 从可行右子树集合中选一棵res.push_back(new TreeNode(i, l, r));  // 并拼接到根节点i上,把生成的子树序列放入答案数组}return res;                                        // 再由子树的解推出原问题的解}vector generateTrees(int n) {vector res = dfs(1, n);return res;}
};

递归代码为什么可以这么写的推导:

https://leetcode.cn/problems/unique-binary-search-trees-ii/solution/cong-gou-jian-dan-ke-shu-dao-gou-jian-suo-you-shu-/

相关内容

热门资讯

我们是一家人初中作文【优质6... 我们是一家人初中作文 篇一我们是一家人家,是我们生活的港湾,是我们心灵的归宿。而我们,是一个幸福温馨...
初中作文:飘落的樱花【实用5... 初中作文:飘落的樱花 篇一樱花是一种美丽而短暂的花朵,它的开放总是给人们带来无尽的惊喜和美好的回忆。...
解开缚心的绳索作文(优质6篇... 解开缚心的绳索作文 篇一绳索,是一种用来束缚的工具,它可以用来捆绑、困住甚至勒死人。然而,有时候,这...
我是谁作文【最新6篇】 我是谁作文 篇一我是谁?这是一个看似简单却又复杂的问题。每个人都有自己独特的身份和故事,我也不例外。...
我们一家人初中作文(经典6篇... 我们一家人初中作文 篇一我们一家人初中作文我是一个初中生,家中有爸爸、妈妈和一个比我小两岁的弟弟。我...
初中生作文600字【推荐6篇... 初中生作文600字 篇一:我的暑假生活暑假终于到了,这是我最期待的时刻。我有一个丰富多彩的暑假计划,...
尊重的作文【优选6篇】 尊重的作文 篇一尊重是一种基本的社会道德,是我们与他人相处时应当遵循的原则。尊重他人不仅能够维护社会...
十年后的我初中作文【优秀6篇... 十年后的我初中作文 篇一我的初中生活是我成长的重要阶段,十年后回顾起来,我深深地感慨万分。初中时期,...
我的生日_(精彩6篇) 我的生日_ 篇一今天是我的生日,我迫不及待地等待着这一天的到来。在这一天,我将和家人、朋友一起庆祝,...
学会放弃的初中作文【优选6篇... 学会放弃的初中作文 篇一在我们的成长过程中,学会放弃是一个非常重要的能力。放弃并不意味着失败,相反,...
闯江湖600字作文【实用6篇... 闯江湖600字作文 篇一:我的江湖初试江湖,是一个神秘而又充满诱惑的地方。作为一个热血青年,我无法抵...
初一作文祖国颂【优选3篇】 初一作文祖国颂 篇一祖国,是我们生活的家园,是我们永远的依靠和坚实的后盾。我深深地热爱着这片土地,因...
关于季节的作文七年级作文精选... 关于季节的作文七年级作文 第一篇如果用春夏秋冬来诠释人生,那么生机是夏的代言,清爽是秋的形象,冷漠是...
由你选择作文【精选3篇】 由你选择作文 篇一标题:友情的力量友情是一种无私的情感,它可以让我们感受到温暖和力量。在我们的生活中...
争当四好少年作文(精选3篇) 争当四好少年作文 篇一争当四好少年作文作为当代少年,我们要时刻牢记自己的使命和责任,争当四好少年。四...
初一军训作文【精彩6篇】 初一军训作文 篇一军训的日子军训是我们初中生活中的一段特殊时光。虽然只有短短的十天,但对我们来说却是...
七年级下册600字左右的作文... 七年级下册600字左右的作文大全 篇一标题:我的暑假计划暑假将至,我开始计划如何度过这个难得的假期。...
别了,初三作文【精选3篇】 别了,初三作文 篇一初三生活即将结束,这一年的学习和成长让我有太多的感慨。回顾这段时光,我不禁感叹岁...
清明节作文600字初中(经典... 清明节作文600字初中 篇一:难忘的清明节清明节是我国传统的节日之一,也是我最喜欢的节日之一。每年的...
你一定要快乐初中优秀作文(推... 你一定要快乐初中优秀作文 篇一快乐是一种宝贵的财富,它伴随着人们的成长和生活。初中生活是我们人生中的...