Leetcode 96.不同的搜索二叉树
2019-08-30 17:59
113 查看
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
示例:
输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
这道题仔细想其实很简单的。首先我们先得明白什么是二叉搜索树,二叉搜索树又称二叉查找树,二叉排序树,它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,
则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
解决这道题用两个函数:
1. G(n); 表示给定整数n的二叉搜索树的长度。其中G(0)=G(1)=1;
2. F(i,n); 表示以i为根节点,数列长度为n的数列能构成不同二叉树的个数;
因为一个数列,如果它的根节点确定了,那么能构成它的不同二叉搜索树的左右节点个数也就确定了。G(n)= F(1,n)+F(2,n)+...+F(n,n)。例如求G(8),其中一个以3为根节点的数列其左子树数为G(3-1);右子树数为4,5,6,7,8,
右子树的算法情况与1,2,3,4,5是一样的,所以右子树个数为G(n-3),可得F(i,n)=G(i-1)*G(n-i);所以G(n)=G(0)*G(n-1)+...+G(n-1)*G(0);由此可看出其实这个G(n)就是卡特兰数,关于卡特兰数具体特点,如果不太了解
可以搜索研究一下 。所以有两个算法。
算法一:动态规则
public class Solution { public int numTrees(int n) { int[] G = new int[n + 1]; G[0] = 1; G[1] = 1; for (int i = 2; i <= n; ++i) { for (int j = 1; j <= i; ++j) { G[i] += G[j - 1] * G[i - j]; } } return G ; } }
算法二:利用数学公式
G(0)=G(1)=1; G(n+1)=2(2n+1)G(n)/(n+2)
class Solution { public: int numTrees(int n) { long G = 1; for(int i = 0; i < n; i++) G= G * 2 * (2 * i + 1) /(i + 2); return G; } };
相关文章推荐
- Leetcode 96.不同的搜索二叉树
- [LeetCode]96 不同二分查找树
- LeetCode700 二叉树中的搜索 python3
- Leetcode 题解 - 搜索--Backtracking(12):输出二叉树中所有从根到叶子的路径
- 二叉树的层次遍历和图的广度优先搜索的相同点和不同点
- 【LeetCode】98. Validate Binary Search Tree 解法,中序遍历,搜索二叉树合法性
- 102.LeetCode Binary Tree Level Order Traversal(easy)[二叉树层次遍历 广度搜索 队列]
- LeetCode题库解答与分析——#96. 不同的二叉查找树UniqueBinarySearchTree
- LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
- LeetCode 96 Unique Binary Search Trees不同的二叉搜索树的个数
- [LeetCode] 从排序的单链表到平衡搜索二叉树
- leetcode 226. Invert Binary Tree 反转二叉树 + DFS深度优先搜索
- LeetCode 96. Unique Binary Search Trees Python Solution, Catalan数 结点数为n的不同形态的二叉树一共有多少种
- 【LeetCode121-130】买卖锁,二叉树搜索,回文检测,恶心的wordladder2 BFS, 围棋消除BFS
- 二叉树的广度搜索非递归 深度搜索递归和非递归
- [LeetCode]100. Same Tree--判断二叉树是否相同
- LeetCode-Binary Tree Maximum Path Sum-二叉树最大路径和-DFS
- LeetCode(96) Unique Binary Search Trees
- 【LeetCode】Maximum Depth of Binary Tree (二叉树最大深度)
- leetcode 111-二叉树最小深度