LeetCode 96 — Unique Binary Search Trees(C++ Java Python)
2014-04-01 21:07
716 查看
题目:http://oj.leetcode.com/problems/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,有多少种结构独特的值为1...n的BST(二叉查找树)?
例如,
给定n = 3,共有5种独特的BST。
分析:
自底向上。对于i个节点的情况,将第j个节点作为根节点,则左子树有j-1个节点,右子树有i-j个节点,左右子树不同BST种数相乘即得到j为根节点时的总数,对j从1到i求和,即得到i个节点不同BST的总数。
另外这是一种Catalan数,公式为
。
C++实现:
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
题目翻译:
给定n,有多少种结构独特的值为1...n的BST(二叉查找树)?
例如,
给定n = 3,共有5种独特的BST。
分析:
自底向上。对于i个节点的情况,将第j个节点作为根节点,则左子树有j-1个节点,右子树有i-j个节点,左右子树不同BST种数相乘即得到j为根节点时的总数,对j从1到i求和,即得到i个节点不同BST的总数。
另外这是一种Catalan数,公式为
。
C++实现:
class Solution { public: int numTrees(int n) { vector<int> num(n + 1, 0); num[0] = 1; num[1] = 1; for(int i = 2; i <= n; i++) for(int j = 1; j <= i; j++) { num[i] += num[j - 1] * num[i - j]; } return num ; } };Java实现:
public class Solution { public int numTrees(int n) { int[] num = new int[n + 1]; num[0] = 1; num[1] = 1; for (int i = 2; i <= n; ++i) { for (int j = 1; j <= i; ++j) { num[i] += num[j - 1] * num[i - j]; } } return num ; } }Python实现:
class Solution: # @return an integer def numTrees(self, n): num = [0 for i in range(n + 1)] num[0] = 1 num[1] = 1 for i in range(2, n + 1): for j in range(1, i + 1): num[i] += num[j - 1] * num[i - j] return num感谢阅读,欢迎评论!
相关文章推荐
- [leetcode-96]Unique Binary Search Trees(c++)
- leetcode 96 c++. Unique Binary Search Trees
- Java [Leetcode 96]Unique Binary Search Trees
- LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
- 【LeetCode 96】Unique Binary Search Trees (C++)
- 96. Unique Binary Search Trees LeetCode
- LeetCode(96)Unique Binary Search Trees
- [Leetcode 96, Medium] Unique Binary Search Trees
- 【LeetCode】C# 96、Unique Binary Search Trees
- [C++]LeetCode: 92 Unique Binary Search Trees II
- 【LeetCode-面试算法经典-Java实现】【096-Unique Binary Search Trees(唯一二叉搜索树)】
- LeetCode 96 Unique Binary Search Tree(Python详解及实现)
- 【Leetcode】【python】Unique Binary Search Trees II
- [LeetCode]96 Unique Binary Search Trees
- leetcode_96_Unique Binary Search Trees
- LeetCode(96) Unique Binary Search Trees
- Leetcode_96_Unique Binary Search Trees
- LeetCode 98 — Validate Binary Search Tree(C++ Java Python)
- leetcode 96: Unique Binary Search Trees
- Unique Binary Search Trees II Leetcode Python