[leetcode] 95.Unique Binary Search Trees II
来源:互联网 发布:linux 根目录清理 编辑:程序博客网 时间:2024/06/13 09:12
题目:
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
题意:
这道题与96道题的区别是,96只需呀统计个数,而这道题是需要保存所有可能的树。
思路:
依旧采用动态规划的思路。对于DP[i][j],在i到j之间选择一个数k作为根,那么会把这段数分成两段,即i->k-1,k+1->j,所以转移方程就是考虑子问题的组合。比如i->k-1,可能有m个子树,k+1->j可能有n个子树,那么对于以k为根,则需要构造m*n个子树,并保存在DP[i][j]中。当然DP[i][i] 就是只有一个元素,那么就只有一种情况。
以上。
代码如下:
/** * 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*> result; if(n == 0){ result.push_back(NULL); return result; } vector<vector<vector<TreeNode*>>> DP(n); for(int i = 0; i < n; i++){ vector<vector<TreeNode*>> temp(n); DP[i] = temp; DP[i][i].push_back(new TreeNode(i + 1)); } for(int j = 0; j < n; j++){ for(int i = j - 1; i >= 0; i--){ for(int k = i; k <= j ; k++){ if(k == i){ for(int m = 0; m < DP[k + 1][j].size(); m++){ TreeNode *root = new TreeNode(k + 1); root->right = DP[k + 1][j][m]; DP[i][j].push_back(root); } } else if(k == j){ for(int m = 0; m < DP[i][k - 1].size(); m++){ TreeNode *root = new TreeNode(k + 1); root->left = DP[i][k - 1][m]; DP[i][j].push_back(root); } } else{ for(int m = 0; m < DP[i][k-1].size(); m++) for(int n = 0; n < DP[k+1][j].size(); n++){ TreeNode *root = new TreeNode(k+1); root->left = DP[i][k-1][m]; root->right = DP[k+1][j][n]; DP[i][j].push_back(root); } } } } } return DP[0][n-1]; }};
0 0
- [LeetCode]95.Unique Binary Search Trees II
- [Leetcode] 95. Unique Binary Search Trees II
- LeetCode --- 95. Unique Binary Search Trees II
- [leetcode] 95.Unique Binary Search Trees II
- [leetcode] 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II LeetCode
- ***LeetCode 95. Unique Binary Search Trees II
- Leetcode 95. Unique Binary Search Trees II
- LeetCode *** 95. Unique Binary Search Trees II
- 【LeetCode】95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II
- [leetcode]95. Unique Binary Search Trees II
- [leetcode]95. Unique Binary Search Trees II
- [LeetCode] 95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II
- [leetcode] 95. Unique Binary Search Trees II
- Leetcode-95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II ,leetcode
- Spring中@Autowired注解、@Resource注解的区别
- Java文件 File练习-递归显示某一目录下的所有文件
- MySQL学习系列9:视图
- 第五单元5.19
- LeetCode_Stack_Maximal Rectangle
- [leetcode] 95.Unique Binary Search Trees II
- leetcode 刷题目,总结,记录,备忘 13
- 2299 Poj Ultra-QuickSort(归并排序求逆序数)
- [Java]学习笔记,随笔【四】
- Web 开发的 JavaScript 框架资料收集(15款)
- Java文件 File练习-递归删除带内容的目录
- 用make编译多个.c文件
- JavaScript语法 (顺序+判断+选择+循环+其他=五种语句)演示
- ucore操作系统实验lab4 -- 内核线程管理