Unique Binary Search Trees

 Total Accepted: 47684 Total Submissions: 131223My Submissions

Question Solution 


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



Show Tags


分析,该问题不考虑节点的不同,只考虑树形状的不同,遍历所有可能难于实现并且时间开销大

这种问题可以考虑动态规划,因为一棵大树可以分解成两颗小的子树组合的形式,因此获得子树的各种树形即刻求出大树的不同树形


public class Solution {

    public int numTrees(int n) {

        

         if (n == 1)

             return 1;

         if (n == 2)

             return 2;

         int[] record = new int[n + 1];

         record[0] = 1;

         record[1] = 1;

         record[2] = 2;

         for (int i = 3; i <= n; i++) {

             int tmp = 0;

             for (int k = 0; k < i; k++) {

                 tmp += (record[k] * record[i - k - 1]);

             }

             record[i] = tmp;

         }

         return record[n];

    }

}