95. Unique Binary Search Trees II
2016-04-02 19:27
549 查看
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ //[3,1,4,null,2,null,5],[3,1,5,null,2,4],[3,2,4,1,null,null,5],[3,2,5,1,null,4], //failed class Solution { public: TreeNode* copy_tree(TreeNode* root) { if(!root) return NULL; TreeNode* temp=new TreeNode(root->val); temp->left=copy_tree(root->left); temp->right=copy_tree(root->right); return temp; } int inorder(TreeNode* root,int i) { if(root->left) i=inorder(root->left,i); root->val=i++; if(root->right) i=inorder(root->right,i); return i; } void get_tree(vector<TreeNode*>& v,TreeNode* root,TreeNode* temp,int i,int n) { if(i>n) { inorder(root,1); v.push_back(copy_tree(root)); //if(v.size()==3) cout<<root->right->right->val; //cout<<root->left->left->val; //v.push_back(root); return; } TreeNode* tmp=new TreeNode(i); if(temp->left) // { temp->right=tmp; get_tree(v,root,temp->left,i+1,n); if(i<n) get_tree(v,root,temp->right,i+1,n); temp->right=NULL; } else { temp->left=tmp; get_tree(v,root,tmp,i+1,n); if(i<n) get_tree(v,root,temp,i+1,n); temp->left=NULL; temp->right=tmp; get_tree(v,root,tmp,i+1,n); temp->right=NULL; } delete tmp; } vector<TreeNode*> generateTrees(int n) { if(n==0) return {}; vector<TreeNode*> v; TreeNode* tmp=new TreeNode(1); get_tree(v,tmp,tmp,2,n); return v; } };
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ //failed class Solution { public: TreeNode* copy_tree(TreeNode* root) { if(!root) return NULL; TreeNode* temp=new TreeNode(root->val); temp->left=copy_tree(root->left); temp->right=copy_tree(root->right); return temp; } void inorder(TreeNode* root) { if(root->left) inorder(root->left); root->val++; if(root->right) inorder(root->right); } void outorder(TreeNode* root) { if(root->left) outorder(root->left); root->val--; if(root->right) outorder(root->right); } void get_tree(vector<TreeNode*>& v,TreeNode* root,TreeNode* temp,int i,int n) { if(i>n) { //inorder(root,1); v.push_back(copy_tree(root)); return; } TreeNode* tmp=new TreeNode(i); //make it the root tmp->left=root; get_tree(v,tmp,tmp,i+1,n); tmp->left=NULL; if(temp->left&&(temp->left->left||temp->left->right)) { inorder(root); tmp->val=1; tmp->right=root; get_tree(v,tmp,temp,i+1,n); tmp->right=NULL; if(!root->left) { root->left=tmp; get_tree(v,root,temp,i+1,n); root->left=NULL; } tmp->val=i; outorder(root); } //make it the rightest temp->right=tmp; get_tree(v,root,tmp,i+1,n); temp->right=NULL; if(!temp->left&&temp!=root) { temp->left=tmp; temp->val=i; tmp->val=i-1; get_tree(v,root,temp,i+1,n); temp->left=NULL; temp->val=i-1; } delete tmp; } vector<TreeNode*> generateTrees(int n) { if(n==0) return {}; vector<TreeNode*> v; TreeNode* tmp=new TreeNode(1); get_tree(v,tmp,tmp,2,n); return v; } };
/** * 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*> get_tree(int l,int r) { if(l>r) return {NULL}; vector<TreeNode*> v; for(int i=l;i<=r;i++) { vector<TreeNode*> left=get_tree(l,i-1); vector<TreeNode*> right=get_tree(i+1,r); for(auto a=left.begin();a!=left.end();a++) { for(auto b=right.begin();b!=right.end();b++) { TreeNode* temp=new TreeNode(i); temp->left=*a; temp->right=*b; v.push_back(temp); } } } return v; } vector<TreeNode*> generateTrees(int n) { if(n==0) return {}; return get_tree(1,n); } };
相关文章推荐
- LC60 Permutation Sequence
- UITableView的介绍及使用
- ubuntu12.04+ros fuerte 跑ORB_SLAM代码
- DuiLib(2)——几种控件的常规属性介绍
- 4 Java基础语法(switch语句,循环语句(for,while),控制跳转语句(break,return,continue))
- HDU - 5288-OO’s Sequence-数学+分类再二分+枚举+contribution costing
- [LeetCode]Implement Stack using Queues
- JS/html/form/XMLHttpRequest Ajax 批量上传文件/图片的3种方式
- POJ1679 The Unique MST
- <%@ include file=” ”%> 和<jsp:include page=” ” flush=”true”/> 区别
- Unique Binary Search Trees
- UITableView的优化
- leetcode 300. Longest Increasing Subsequence 最长上升序列数
- LeetCode334. Increasing Triplet Subsequence
- easyui tree文本单击事件切换展开/折叠节点的状态
- Android多国语言的value文件夹命名方式
- AndroidUI组件之ActionBar--基于下拉的导航方式
- requirejs的使用
- 60. Permutation Sequence
- 这么巧妙思路(二)Longest Ordered Subsequence