[leetcode]Unique Binary Search Trees

来源:互联网 发布:淘宝卖家说给补偿5元 编辑:程序博客网 时间:2024/06/06 11:37

问题描述:

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];    }


0 0
原创粉丝点击