[leetcode][tree] Unique Binary Search Trees
来源:互联网 发布:编程课程有什么 编辑:程序博客网 时间:2024/06/05 18:22
题目:
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递归实现(存在大量的重复计算,所以会超时)
class Solution {public: int numTrees(int n) {if (n <= 0) return 0;if (n <= 2) return n;int res = 0;for (int i = 1; i <= n; ++i){int numTreesOfLeftChild = numTrees(i - 1);int numTreesOfRightChild = numTrees(n - i);if (0 == numTreesOfLeftChild || 0 == numTreesOfRightChild) res += numTreesOfLeftChild + numTreesOfRightChild;else res += numTreesOfLeftChild * numTreesOfRightChild;}return res;}};
动态规划(用table记录)
<pre name="code" class="cpp">class Solution {public: int numTrees(int n) {int *table = new int[n+1];//table[i]表示i个数能形成的不同二叉树的个数for (int i = 0; i < 3; ++i) table[i] = i;//table初始化for (int i = 3; i <= n; ++i){//求i个数能形成多少种二叉树table[i] = 0;for (int j = 1; j <= i; ++j){//table[i]等于分别由1...i做根节点时可以形成的二叉树的个数的总和int numTreesOfLeftChild = table[j - 1];//左子树节点个数为j-1int numTreesOfRightChild = table[i - j];//右子树节点个数为i-jif (0 == numTreesOfLeftChild || 0 == numTreesOfRightChild) table[i] += numTreesOfLeftChild + numTreesOfRightChild;//当左右子树中有一棵为空时else table[i] += numTreesOfLeftChild * numTreesOfRightChild;//左右子树都不为空时}}int res = table[n];delete[]table;return res;}};
0 0
- [leetcode][tree] Unique Binary Search Trees
- [leetcode][tree] Unique Binary Search Trees II
- LeetCode: Unique Binary Search Trees
- LeetCode : Unique Binary Search Trees
- [Leetcode] Unique Binary Search Trees
- [LeetCode]Unique Binary Search Trees
- LeetCode Unique Binary Search Trees
- Leetcode: Unique Binary Search Trees
- LeetCode-Unique Binary Search Trees
- [leetcode] Unique Binary Search Trees
- LeetCode - Unique Binary Search Trees
- [LeetCode] Unique Binary Search Trees
- 【Leetcode】Unique Binary Search Trees
- Leetcode: Unique Binary Search Trees
- 【LeetCode】Unique Binary Search Trees
- Leetcode Unique Binary Search Trees
- Leetcode: Unique Binary Search Trees
- [LeetCode] Unique Binary Search Trees
- 中兴VIVO陷眼纹技术之争:谁是复制者?
- lvs+keepalived实现HA
- 友盟错误日志分析
- decorators.xml的用法
- 关于电容屏幕驱动的几个文件ft5x06-ts.idc/ft5x06-ts.kcm/ft5x06-ts.kl的认识
- [leetcode][tree] Unique Binary Search Trees
- 51单片机中断
- android插件式开发
- sudo apt-get update遇到的问题
- 以SYSTEM权限运行程序
- APNs消息推送完整讲解
- JAVA设计模式
- Java aio(异步网络IO)初探
- 多线程间的通信问题之交替打印