Unique Binary Search Trees II
来源:互联网 发布:宝宝哭声辨别软件 编辑:程序博客网 时间:2024/05/01 03:17
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void buildTree(int& start,int& cnt,TreeNode* root,const TreeNode* prototype) { if(prototype->left!=NULL) { TreeNode* left=new TreeNode(0); buildTree(start,cnt,left,prototype->left); root->left=left; } root->val=start++; if(prototype->right!=NULL) { TreeNode* right=new TreeNode(0);buildTree(start,cnt,right,prototype->right); root->right=right; } } vector<TreeNode *> generateTrees(int n) { vector<vector<TreeNode*> > dp(n+1,vector<TreeNode*>()); dp[0].push_back(NULL);if(n==0){return dp[0];} TreeNode* root1=new TreeNode(1); dp[1].push_back(root1);if(n==1){return dp[1];} for(int i=2;i<=n;++i) { //enum left sub tree nodes count for(int j=0;j<i;++j) { vector<TreeNode*> leftSubTree=dp[j]; vector<TreeNode*> rightSubTree=dp[i-j-1]; for(int a=0;a<leftSubTree.size();++a) { for(int b=0;b<rightSubTree.size();++b) { TreeNode* root=new TreeNode(j+1); if(leftSubTree[a]!=NULL) { TreeNode* left=new TreeNode(0); int start1=1; int cnt1=j; buildTree(start1,cnt1,left,leftSubTree[a]); root->left=left; } if(rightSubTree[b]!=NULL) { TreeNode* right=new TreeNode(0); int start2=j+2; int cnt2=i-j-1; buildTree(start2,cnt2,right,rightSubTree[b]); root->right=right; } dp[i].push_back(root); } } } } return dp[n]; }};
最关键的在于要注意深拷贝,否则指针就指的乱套了。其次要注意在构建树时,虽然可以直接利用之前构建好的树的结构,但是新构建的树中每个节点需要填的值是不能直接利用之前构建好的树中的值,需要在构建过程中重建。
0 0
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees (& II)
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- 博弈论基本概念
- 【屯题计划】【#2】【17/50】
- (十)建造者模式
- 【二进制拆分多重背包】【HDU1059】【Dividing】
- UML:学习笔记1 简单了解及构造
- Unique Binary Search Trees II
- Unity3D的着色器介绍(一)—软渲染和着色器原理
- ACM-HDU1870愚人节的礼物(栈初步练习)
- Single Number
- 保留尾部*
- PL/SQL 运算符(Operator)
- Caffe 深度学习框架上手教程
- hdu 4089 Activation(概率dp)
- linux2.6.29 CFS调度详细分析(一)