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

leetcode95 Unique Binary Search Trees II

2016-01-06 15:10 555 查看
Given 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


/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode*> ans;
ans=generate(1,n);
return ans;
}
vector<TreeNode*> generate(int a,int b)
{
vector<TreeNode*> ans;
if(a>b)
return ans;
if(a==b)
{
TreeNode *temp=new TreeNode(a);
ans.push_back(temp);
return ans;
}
vector<TreeNode*> vt1=generate(a+1,b);
for(int i=0;i<vt1.size();i++)
{
TreeNode *tr1=new TreeNode(a);//不能放到外边,否则,ans中的tr1将会变成全部相同一个。(tr1相同,tr1->right不同,故应多分tr1)
tr1->right=vt1[i];
ans.push_back(tr1);
}

vector<TreeNode*> vt2=generate(a,b-1);
for(int i=0;i<vt2.size();i++)
{
TreeNode *tr2=new TreeNode(b);
tr2->left=vt2[i];
ans.push_back(tr2);
}

for(int i=a+1;i<=b-1;i++)
{
vector<TreeNode*> vt31=generate(a,i-1);
vector<TreeNode*> vt32=generate(i+1,b);
for(int j=0;j<vt31.size();j++)
{
for(int k=0;k<vt32.size();k++)
{
TreeNode *tr3=new TreeNode(i);
tr3->left=vt31[j];
tr3->right=vt32[k];
ans.push_back(tr3);
}
}

}
return ans;
}
};


View Code

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: