leetcode 96 不同的二叉树
Posted wqali
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 96 不同的二叉树相关的知识,希望对你有一定的参考价值。
本问题可以用动态规划求解。
给定一个有序序列 1 ... n,为了根据序列构建一棵二叉搜索树。我们可以遍历每个数字 i,将该数字作为树根,1 ... (i-1) 序列将成为左子树,(i+1) ... n 序列将成为右子树。于是,我们可以递归地从子序列构建子树。
在上述方法中,由于根各自不同,每棵二叉树都保证是独特的。
可见,问题可以分解成规模较小的子问题。因此,我们可以存储并复用子问题的解,而不是递归的(也重复的)解决这些子问题,这就是动态规划法。
算法
问题是计算不同二叉搜索树的个数。为此,我们可以定义两个函数:
G(n): 长度为n的序列的不同二叉搜索树个数。
F(i,n): 以i为根的不同二叉搜索树个数
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[n];
}
}
以上是关于leetcode 96 不同的二叉树的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 96. 不同的二叉搜索树 | Python