您的位置:首页 > 产品设计 > UI/UE

【leetcode】Unique Binary Search Trees II

2014-05-26 12:12 316 查看
题目:给定整数n,返回所有结果为1,,n 的不重复二叉搜索树。

分析:在构建二叉树的题目中,我们了解到,给定二叉的中序遍历和前序遍历我们可以构建一棵唯一的二叉树,给定中序遍历和后序遍历,我们也能构建一棵唯一的二叉树。现在类似于只给定了中序遍历,那么,其构建出的树是不唯一的,即存在多棵,而具体的数量我们在题目一中计算过,是符合卡特兰的。

我们在构建唯一的二叉树的时候,我们可以用单一的指针去接收返回的子树结点,但是现在子树的结点不只一个,所以我们需要一个指针容器去接收。而以某个数字为节点的树的个数恰好是其左右子树的组合数。

//construct the BSFs whose inorder travel is
// from start to end.
//start and end used to constraint boundary
vector<TreeNode*> AddNodes(int start, int end){
if( start > end)
return vector<TreeNode*> (1, NULL);
//container to store the root of each differ BST
vector<TreeNode*> roots;
for (int i = start; i <= end; ++i)
{
//get the left sons
vector<TreeNode*> lefts  = AddNodes(start, i - 1);
//get the right sons
vector<TreeNode*> rights = AddNodes(i + 1, end);

for (int l = 0; l < lefts.size(); ++l)
for (int r = 0; r < rights.size(); ++r)
{
TreeNode* root = new TreeNode(i);
root->left = lefts[l];
root->right = rights[r];
roots.push_back(root);
}
}
return roots;
}

vector<TreeNode *> generateTrees(int  n ) {

vector<TreeNode*> roots;
roots = AddNodes(1, n);
return roots;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: