LeetCode 95: Unique Binary Search Trees II
来源:互联网 发布:如何精通三坐标编程 编辑:程序博客网 时间:2024/05/18 06:37
Unique Binary Search Trees II
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.
解题思路
和 Unique Binary Search Trees 相比,本题要求返回所有的 structurally unique BST 而不是 structurally unique BST 的数目。 因此,动态规划在这里不太适用。
这里依然使用递归求解。每次选取一个结点为根,然后递归求解左右子树的所有结果,最后根据返回的所有左右子树,依次选取然后接到当前结点上(每个左子树依次和每一个右子树组合,总共有左右子树数量的乘积种情况),构造好之后作为当前树的结果返回。
代码入下:
/** * 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 {private: vector<TreeNode*> internalGenerateTrees(int start, int end) { vector<TreeNode *> result; if (start > end) { // 空树 result.push_back(NULL); } else { for (int i = start; i <= end; ++i) { // 递归求解左子树 vector<TreeNode*> lefts = internalGenerateTrees(start, i - 1); // 递归求解右子树 vector<TreeNode*> rights = internalGenerateTrees(i + 1, end); for (int m = 0; m < lefts.size(); ++m) { for (int n = 0; n < rights.size(); ++n) { // 每个左子树依次和每一个右子树组合 TreeNode *root = new TreeNode(i); root->left = lefts[m]; root->right = rights[n]; result.push_back(root); } } } } return result; }public: vector<TreeNode*> generateTrees(int n) { return internalGenerateTrees(1, n); }};
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
- 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: Unique Binary Search Trees II
- LeetCode : Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- JAVA多线程和并发基础面试问答
- Linux里如何查找文件内容
- 基于攻击链的威胁感知系统
- 【Qt】QString向C/C++转换
- java email操作demo和解析eml文件
- LeetCode 95: Unique Binary Search Trees II
- 151027总结
- MySQL 忘了root密码怎么办
- linux centos python scrapy 环境配置
- MQTT学习笔记-Mosquitto的安装与启动
- C语言 二维数组动态分配和释放
- 开发板与电脑连接局域网
- 6.5 插入符号(不是光标)
- Win2008 r2 远程桌面服务授权管理器激活方法