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
分别考虑左右子树对应的方法数,然后对于左右子树方法数相乘(左右子树节点数为0的单独处理)。可以递归求子树的个数,也可以用数组记录已知n个节点的子树的方法数。
int numTrees(int n) { //C++ if(n == 1) return 1; if(n == 2) return 2; vector<int> record(n+1,0); record[0] = 0; record[1] = 1; record[2] = 2; for(int i = 3; i <= n; i++) { int sum = 0; int k; //left nodes for(k = 0; k < i; k++) { int temp; if(k == 0 ) temp = record[i-k-1]; else if(i-k-1 == 0) temp = record[k]; else temp = record[k]*record[i-k-1]; sum += temp; } record[i] = sum; } return record[n]; }
[leetcode]Unique Binary Search Trees
原文地址:http://blog.csdn.net/chenlei0630/article/details/41686587