LeetCode刷题-95. 不同的二叉搜索树 II
题目链接:95. 不同的二叉搜索树 II
¶题解:
生成所有二叉搜索树!有意思的题!
¶题目简述:
给定一个序列,生成所有二叉搜索树的序列!
¶题解:
递归DFS:
对于一个区间的二叉搜索树,我们只需要枚举根节点所在的位置即可,通过递归一步步构建不同的二叉搜索树!
- 从
1 ~ n
开始搜索 - 枚举根节点位置为
l ~ r
- 递归左子树
l ~ i - 1
,右子树i + 1 ~ r
- 由于相当于乘法原理,左子树随便一种情况和右子树随便一种情况组合都是一个合法的二叉搜索树
- 左子树取一种情况,右子树取一种情况,构建根节点,连接起来形成当前结构的二叉搜索树
- 将当前所有二叉搜索树插入
res
并返回
递归终止条件:
l > r
:即为空树,返回NULL
n == 0
:即输入为0,直接返回空容器{}
注意:
- 根节点一定要随用随创建,若创建第一层for循环,会导致覆盖情况发生,由于存储的是指针,最后存储将都会是一样的一个二叉树
- 此处的
res
不能创建到全局的,那样无法完成下一层向上一层的传递
时间复杂度:是卡特兰数,n个节点构成的二叉搜索树种类是卡特兰数,即 C2nn / n + 1 !对于n个点的二叉搜索树,方案数如下:
其实推完公式就是卡特兰数,这里就不推了!
¶AC代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论