95. Unique Binary Search Trees II
来源:互联网 发布:杀破狼 js mp3 编辑:程序博客网 时间:2024/05/26 17:48
问题描述
Given an integer 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.Unique Binary Search Trees,第96题要求的是二叉搜索树有多少棵,这个就很简单,分析一下就可以知道它的答案是卡特兰数。对于 1<= i <= n. 我们以i为节点,比它小的数字进行构造左边的二叉搜索树,比它大的进行构造右边的二叉搜索树。这样的情况有f(i-1)*f(n-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) { if ( n == 0) return vector<TreeNode*>(); vector<int> nums(n,0); for (int i = 0; i < n; ++i) { nums[i] = i + 1; } return helper(nums); } vector<TreeNode*> helper(vector<int>nums) { if (nums.size() == 0) { TreeNode* leaf = NULL; vector<TreeNode*> result; result.push_back(leaf); return result; } if (nums.size() == 1) { TreeNode* leaf = new TreeNode(nums[0]); vector<TreeNode*> result; result.push_back(leaf); return result; } vector<TreeNode*> result; for (int i = 0; i < nums.size(); ++i) { vector<int> left(i); if (i != 0) copy(nums.begin(),nums.begin()+i,left.begin()); vector<int> right(nums.size()-i-1); if (nums.size()-i-1 != 0) copy(nums.begin()+i+1,nums.end(),right.begin()); vector<TreeNode*> l_result = helper(left); vector<TreeNode*> r_result = helper(right); for (int m = 0; m < l_result.size(); ++m) { for (int n = 0; n < r_result.size(); ++n) { TreeNode* root = new TreeNode(nums[i]); root->left = l_result[m]; root->right = r_result[n]; result.push_back(root); } } } return result; }};
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
- 95. Unique Binary Search Trees II LeetCode
- ***LeetCode 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II
- Leetcode 95. Unique Binary Search Trees II
- 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 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II
- Dota2 AI开发(一)环境配置
- 八皇后问题
- [jvm] [面试] jvm 常用配置参数
- struts2之数据校验
- 用vue-cli构建了项目之后在webstorm开发,用npm run dev跑本地服务,经常修改之后在浏览器刷新没反应,偶尔才会有刷新,需要重新跑一遍npm run dev才会更新,这是怎么回事呢?
- 95. Unique Binary Search Trees II
- Behavio深入理解
- 275. H-Index II
- Java-数据结构-BitSet
- [LeetCode] 92. Reverse Linked List II
- 全面掌控MySQL加锁规则
- 算法作业7
- ReactNative制作Component控件并且复用(二)
- 设计模式笔记五:原型模式