题目
官方解
简要改自官网解。
利用树的遍历,以递归方式实现不同二叉树的构造。

我们从序列 1...n 中取出数字 i,作为当前树的树根。于是,剩余 i−1 个元素可用于左子树,n−i 个元素用于右子树。 如 前文所述,这样会产生 G(i−1) 种左子树 和 G(n−i) 种右子树,其中 G 是卡特兰数。
现在,我们对序列 1...i−1 重复上述过程,以构建所有的左子树;然后对 i+1...n 重复,以构建所有的右子树。
这样,我们就有了树根 i 和可能的左子树、右子树的列表。
最后一步,对两个列表循环,将左子树和右子树连接在根上。
C++实现
1 | /** |
Java实现
1 | class Solution { |