【LeetCode】Unique Binary Search Trees && II
2014-04-04 15:54
381 查看
参考
http://www.cnblogs.com/remlostime/archive/2012/11/19/2777841.htmlhttp://blog.csdn.net/maqingli87/article/details/8010563
题目描述
Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
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.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
题目分析
这是一个动态规划的题目,用递归或循环法都可以,需要注意的,前面计算下来的结果,要记录下来,不要重复计算就可以了。总结
代码示例
/* 编译环境CFree 5.0 博客地址:http://blog.csdn.net/Snowwolf_Yang */ #include #include #include using namespace std; #if 0 class Solution { public: int numTrees(int n) { vec.resize(n+1); vec[0] = 1; return numTreesCore(n); } int numTreesCore(int n) { if(vec >0) return vec ; int num = 0; for(int i=0;i vec; }; #elif 1 class Solution { public: int numTrees(int n) { vec.resize(n+1); if(n >0)vec[0] = 1; if(n >0)vec[1] = 1; if(n >1)vec[2] = 2; if(n >2) for(int i=3;i<=n;i++) { vec = 0; //这里需要初始化 for(int j = 0;j[i] vec; }; #endif void check(int x,int expected) { if(x==expected) printf("---------------------passed\n"); else printf("---------------------failed\n"); } int main() { printf("main begin\n"); Solution so; //check(so.numTrees(1),1); //check(so.numTrees(2),2); check(so.numTrees(3),5); check(so.numTrees(4),14); // check(so.numTrees(5),0); return 0; } /* class Solution { public: int numTrees(int n) { vec.resize(n+1); return numTreesCore(n); } int numTreesCore(int n) { if(vec >0) { //printf("*vec[%d] = %d\n",n,1); return vec ; } if(n == 0) { vec = 1; //printf("0vec[%d] = %d\n",n,1); return 1; } int num = 0; for(int i=0;i vec; }; */
/** * Definition for binary tree * 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) { return generateTreesHelper(1, n); } vector<TreeNode *> generateTreesHelper(int begin, int end) { vector<TreeNode *> ret; if (end < begin) { ret.push_back(NULL); return ret; } for (int i = begin; i<= end; i++) { vector<TreeNode *> left = generateTreesHelper(begin, i - 1); vector<TreeNode *> right = generateTreesHelper(i + 1, end); for (int m = 0; m < left.size(); m++) { for (int n = 0; n < right.size(); n++) { TreeNode * root = new TreeNode(i); root->left = left[m]; root->right = right ; ret.push_back(root); } } } return ret; } };
推荐学习C++的资料
C++标准函数库http://download.csdn.net/detail/chinasnowwolf/7108919
在线C++API查询
http://www.cplusplus.com/
相关文章推荐
- leetcode -- Unique Binary Search Trees I&II -- 重点
- [LeetCode] 95. Unique Binary Search Trees II & I
- LeetCode之“动态规划”:Unique Binary Search Trees && Unique Binary Search Trees II
- LeetCode解题报告—— Reverse Linked List II & Restore IP Addresses & Unique Binary Search Trees II
- (Leetcode)Unique Binary Search Trees I & II
- leetcode之Unique Binary Search Trees && Unique Binary Search Trees II
- [Leetcode]Unique Binary Search Trees I & II
- LeetCode 95. Unique Binary Search Trees II&96. Unique Binary Search Trees--动态规划,二叉树
- LeetCode: Unique Binary Search Trees I & II
- 【LeetCode从零单刷】Unique Binary Search Trees I & II
- LeetCode之Unique Binary Search Trees & Unique Binary Search Trees II
- [LeetCode]Unique Binary Search Trees I&II
- 【LeetCode】Unique Binary Search Trees I && II
- 【leetcode】Unique Binary Search Trees I & II
- leetcode || 95、Unique Binary Search Trees II
- [LeetCode] 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 & Binary Tree Level Order Traversal & Binary Tree Zigzag Level Order Traversal