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

LeetCode 96. 不同的二叉搜索树 | Python

leetcode-----96. 不同的二叉搜索树

LeetCode 96 不同的二叉搜索树[数学 动态规划] HERODING的LeetCode之路

Leetcode 96. 不同的二叉搜索树

LeetCode 96.不同的二叉搜索树