[LeetCode]Unique Binary Search Trees II
2015-12-15 16:49
459 查看
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.
Top-Down 备忘录的Dp解法
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
Top-Down 备忘录的Dp解法
/** * 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*> ret; if(n==0){ return ret; } vector<vector<vector<TreeNode*>>> Dp(n,vector<vector<TreeNode*>>(n));//n*n 初始化Dp helper(1,n,ret,Dp);//开始Top-Down Dp,备忘录法递归 return ret; } void helper(int start,int end,vector<TreeNode*> &ret,vector<vector<vector<TreeNode*>>> &Dp){ if(start>end){ ret.push_back(NULL);//start>end 没有解,放入NULL节点,递归终点,Dp初始值 return; } if(!Dp[start-1][end-1].empty()){ ret = Dp[start-1][end-1]; //把当前存储的Dp放在ret中,最后返回的ret就是Dp[0][n-1]; return; } for(int i=start; i<=end; ++i){ vector<TreeNode*> left; //左侧解集 vector<TreeNode*> right;//右侧解集 helper(start,i-1,left,Dp); helper(i+1,end,right,Dp); for(int j=0; j<left.size(); ++j){ for(int k=0; k<right.size(); ++k){ TreeNode* node = new TreeNode(i);//Dp[0] 就是遍历i从0到n,把i左指针指向左侧解集的每一个节点,右指针指向右侧解集的每一个节点 node->left = left[j]; node->right = right[k]; ret.push_back(node); //当前解放回ret } } } Dp[start-1][end-1] = ret;//保存Dp值 } };
相关文章推荐
- Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)
- 第九章 Editing UITableView
- 在DLL中使用duilib,并把ZIP皮肤编译进DLL中
- UITableViewCell中去除没有内容的cell的分割线
- Ant_的最完整build.xml解释
- Swing UI线程安全操作
- UITextFiled-弹出键盘的类型
- iOS 关于设置UIView的autoresizingMask没有作用的问题
- Stack Overflow:iOS how to use UIAlertView
- Android6.0的phone应用源码分析(3)——phone 拨号UI分析
- android UI界面 weight 用法
- 重定向和转发有什么区别!getRequestDispatcher,sendRedirect为代表(1)
- UIButtun的一些设置方法
- iOS程序-UIScrollView的基本使用
- 蓝牙自动打开并配对
- MUI离线原生打包,利用Android Studio进行原生打包MUI项目
- IQueryable与IEnumberable的区别(转)
- Juery 高性能编码
- 数据库创建mysql_query($sql,$link)
- String StringBuffer StringBuilder