Unique Binary Search Trees
2014-01-03 23:10
197 查看
Problem: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.
初看这道题目,感觉既然给定了N,要求计算出不同形状的树的个数,略像找规律题......好吧,这条路我没走下去(大家有这个思路的,欢迎交流啊)。分析了一下后,我认为,既然给定了节点数N,就给定了树深,根据这个树深,建一个完全二叉树,然后从中选取n个节点满足:1.包含根节点
2.连通条件。这个思路只要求我们实现三个子功能即可,建完全二叉树,选节点包含根节点且连通,在进一步分析后,发现,前两个条件都容易满足,但第三个(连通),不是说不能,是有难度,略复杂。
对于N个节点而言,首先我们确定根节点,就剩下N-1个节点,分布在根节点的左右子树上,则左子树的节点数k可能是(0~N-1)个,右子树为N-1-k个节点,所以
如果是以我的思路来说,这必须是递归求解啊,边界条件是f[0]=1;(k=0时),f函数是求n个节点时BST的个数。
但是,经过和同学的讨论,觉得可以用一种反向的方法,从f[0]求起,不理会一开始要求求的n的BST个数,而是求出0~n个节点的每个节点的BST数,并存在数组中,这样,在程序一次运行中,可以避免重复求f[k]。
代码如下:
个人感觉这种方法是从底向上,递归是从顶向下,很相似。好吧,原来这个叫递推,它的空间复杂度比递归较大。
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.
初看这道题目,感觉既然给定了N,要求计算出不同形状的树的个数,略像找规律题......好吧,这条路我没走下去(大家有这个思路的,欢迎交流啊)。分析了一下后,我认为,既然给定了节点数N,就给定了树深,根据这个树深,建一个完全二叉树,然后从中选取n个节点满足:1.包含根节点
2.连通条件。这个思路只要求我们实现三个子功能即可,建完全二叉树,选节点包含根节点且连通,在进一步分析后,发现,前两个条件都容易满足,但第三个(连通),不是说不能,是有难度,略复杂。
对于N个节点而言,首先我们确定根节点,就剩下N-1个节点,分布在根节点的左右子树上,则左子树的节点数k可能是(0~N-1)个,右子树为N-1-k个节点,所以
f[0]=1; for(k=1;k<=n-1;k++) f += f[k]*f[n-1-k];
如果是以我的思路来说,这必须是递归求解啊,边界条件是f[0]=1;(k=0时),f函数是求n个节点时BST的个数。
但是,经过和同学的讨论,觉得可以用一种反向的方法,从f[0]求起,不理会一开始要求求的n的BST个数,而是求出0~n个节点的每个节点的BST数,并存在数组中,这样,在程序一次运行中,可以避免重复求f[k]。
代码如下:
class Solution { public: int numTrees(int n) { int f[100] = {0}; f[0] = 1; for(int j=1;j<=n;j++) { for(int k=0;k<=j-1;k++) f[j] += f[k]*f[j-1-k]; } return f ; } };
个人感觉这种方法是从底向上,递归是从顶向下,很相似。好吧,原来这个叫递推,它的空间复杂度比递归较大。
相关文章推荐
- Unique Binary Search Trees (leetcode)
- Unique Binary Search Trees
- Unique Binary Search Trees II
- LeetCode之Unique Binary Search Trees & Unique Binary Search Trees II
- LeetCode 096 Unique Binary Search Trees
- [leetcode]Unique Binary Search Trees II
- [LeetCode] 95. Unique Binary Search Trees II 唯一二叉搜索树 II
- LeetCode力扣之95. Unique Binary Search Trees II
- leetcode JAVA Unique Binary Search Trees 难度系数3 3.34
- Java for LeetCode 096 Unique Binary Search Trees
- Unique Binary Search Trees II
- Unique Binary Search Trees - LeetCode
- LeetCode 96 Unique Binary Search Trees II
- LeetCode 095 Unique Binary Search Trees II
- Unique Binary Search Trees II(leetcode)
- leetcode:Unique Binary Search Trees
- leetcode JAVA Unique Binary Search Trees II 4.28 难度系数4
- [DP] Unique Binary Search Trees
- Unique Binary Search Trees
- 【unique-binary-search-trees-ii】