1. 题目
给定一个整数 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 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ \3 2 1 1 3 2/ / \ \2 1 2 3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
类似题目:
程序员面试金典 - 面试题 04.09. 二叉搜索树序列(双端队列+回溯)**
LeetCode 96. 不同的二叉搜索树(DP)
- 遍历数据 [1,n] 的每个点,分成两半,递归生成
class Solution {
public:vector<TreeNode*> generateTrees(int n) {if(n == 0)return {};return generateTrees(1,n);}vector<TreeNode*> generateTrees(int start, int end){vector<TreeNode*> ans;if(start > end){ans.push_back(NULL);return ans;}vector<TreeNode*> subLeft, subRight;TreeNode *node;for(int i = start; i <= end; i++){subLeft = generateTrees(start,i-1);subRight = generateTrees(i+1,end);for(TreeNode* l : subLeft)for(TreeNode* r : subRight){node = new TreeNode(i);node->left = l;node->right = r;ans.push_back(node);}}return ans;}
};
36 ms 17.7 MB