Unique Binary Search Trees

来源:互联网 发布:香港 知乎 编辑:程序博客网 时间:2024/04/28 11:08

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

 

dp[i] 记录长度为i 时二叉树的种类数。

从1 到 n计算各长度的值,当计算长度为len是所有 节点数小于len的二叉树的值都是已知的。

从1 到len 选择一个数k作为根,所有小于k的数做为左子树,大于k的数做右子树,扫描时所有子树的长度为lenchild为[0 --  len - 1]所以所有dp[lenchild]的值都是已知的

左树可能的情况为dp[k - 1],右树可能的情况为dp[len - k],则dp[len] = {sum(dp[k - 1] * dp[len - k])| k = (123...len)};  dp[0] = 1 表示空树!

 

 

class Solution {public:    int numTrees(int n) {       int *dp = new int[n + 5];   dp[0] = 1;   for(int i = 1; i <= n; i++)   {   dp[i] = 0;   for(int j = 1; j <= i; j++)   {   dp[i] += dp[j - 1] * dp[i - j];   }   }   int rtv = dp[n];   delete[] dp;   return rtv;    }};


 

0 0
原创粉丝点击