题目描述
给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 。
示例
输入:3
输出:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]
解释:
以上的输出对应以下 5 种不同结构的二叉搜索树:
声明
本文答案参考自 LeetCode 官方题解。[敲打]
讲个骚话顺便科普一下“二叉搜索树”
好家伙,先有Ⅱ呢~[奸笑][看]
二叉搜索树关键的性质是根节点的值 大于 左子树所有节点的值,小于 右子树所有节点的值,且左子树和右子树也同样为二叉搜索树。
解法:递归
树这种东西,经常需要考虑递归。
因为 二叉搜索树某一结点的左子树和右子树也同样为二叉搜索树。
所以,对于这道题:
- 要生成 [1 , n] 的二叉搜索树,我们可以把 [1 , n] 拆分为 [ 1 , i ] 和 [ i , n]
- 分别对 [ 1 , i ] 和 [ i , n] 求其生成的二叉搜索树
- 然后再把第2步中的两棵子二叉搜索树 拼接在一起
就这样一层一层地拆分下去,然后再层层返回,我们就可以得到二叉搜索树了。
递归就是这样,我们的思路是清晰的,代码也是简洁的,但是在分析代码运行的过程就有点懵。所以我们就尽量不要想太多,思路对就行了[呲牙]
这里的 i 可以取 1 ~ n 之间,因为题目说是要 生成 所有的 二叉搜索树 。