Leetcode-95.Unique Binary Search Trees II(a representative recursion problem)
2017-01-11 22:07
501 查看
题目:
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.
For example,
Given n = 3, your program should return all 5 unique BST's shown below.
Subscribe to see which companies asked this question
AC代码:
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode *>result;
if (n == 0)return result;
result = generateSubTree(1,n);
return result;
}
vector<TreeNode *> generateSubTree(int start,int end){//产生从start到end之间编号的子树
vector<TreeNode *>re;
if (end < start)return re;
if (end - start == 0){
TreeNode *temp = new TreeNode(end);
re.push_back(temp);
return re;
}
for (int root = start; root <= end;root++){//根节点编号
vector<TreeNode *>left = generateSubTree(start,root-1);//产生左子树
vector<TreeNode *>right = generateSubTree(root+1,end);//产生右子树
int leftnum = left.size();
int rightnum = right.size();
for (int i = 0; i < (leftnum==0?1:leftnum);i++){
for (int j = 0; j < (rightnum==0?1:rightnum);j++){
TreeNode *tem = new TreeNode(root);
tem->left = (leftnum==0?NULL:left[i]);
tem->right = (rightnum==0?NULL:right[j]);
re.push_back(tem);
}
}
}
return re;
}
};
分析:这道题是Leetcode-95.Unique Binary Search Trees的升级,基本思想是类似的,但是这里需要注意的是vector<TreeNode*>存放的是每棵树的根节点
的指针,容器的大小代表其存放的二叉搜索树的数量。在递归求解中,
1.将每个节点的指针依次存放到根节点的左右子树区域(left和right)。
2.通过数字root来划分左右字数的数字,并将它们形成的子二叉搜索树链接起来。。。
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.
For example,
Given n = 3, your program should return all 5 unique BST's shown below.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
Subscribe to see which companies asked this question
AC代码:
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode *>result;
if (n == 0)return result;
result = generateSubTree(1,n);
return result;
}
vector<TreeNode *> generateSubTree(int start,int end){//产生从start到end之间编号的子树
vector<TreeNode *>re;
if (end < start)return re;
if (end - start == 0){
TreeNode *temp = new TreeNode(end);
re.push_back(temp);
return re;
}
for (int root = start; root <= end;root++){//根节点编号
vector<TreeNode *>left = generateSubTree(start,root-1);//产生左子树
vector<TreeNode *>right = generateSubTree(root+1,end);//产生右子树
int leftnum = left.size();
int rightnum = right.size();
for (int i = 0; i < (leftnum==0?1:leftnum);i++){
for (int j = 0; j < (rightnum==0?1:rightnum);j++){
TreeNode *tem = new TreeNode(root);
tem->left = (leftnum==0?NULL:left[i]);
tem->right = (rightnum==0?NULL:right[j]);
re.push_back(tem);
}
}
}
return re;
}
};
分析:这道题是Leetcode-95.Unique Binary Search Trees的升级,基本思想是类似的,但是这里需要注意的是vector<TreeNode*>存放的是每棵树的根节点
的指针,容器的大小代表其存放的二叉搜索树的数量。在递归求解中,
1.将每个节点的指针依次存放到根节点的左右子树区域(left和right)。
2.通过数字root来划分左右字数的数字,并将它们形成的子二叉搜索树链接起来。。。
相关文章推荐
- LeetCode 95. Unique Binary Search Trees II
- [Leetcode] 95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II
- Leetcode: 95. Unique Binary Search Trees II
- leetcode_middle_98_95. Unique Binary Search Trees II
- ***LeetCode 95. Unique Binary Search Trees II
- LeetCode 95.Unique Binary Search Trees II
- Leetcode 95. Unique Binary Search Trees II
- Leetcode 95. Unique Binary Search Trees II
- leetcode-java-95. Unique Binary Search Trees II
- Leetcode 95. Unique Binary Search Trees II 二叉搜索树2 解题报告
- [LeetCode] 95. Unique Binary Search Trees II 唯一二叉搜索树 II
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
- LeetCode 95. Unique Binary Search Trees II
- [LeetCode]95. Unique Binary Search Trees II(DP,二叉树)
- leetcode 95. Unique Binary Search Trees II-分治算法|动态规划|卡特兰数
- leetcode 95. Unique Binary Search Trees II | Java最短代码实现
- Leetcode-95. Unique Binary Search Trees II
- leetcode 95. Unique Binary Search Trees II(dp)
- LeetCode *** 95. Unique Binary Search Trees II