LeetCode 96. 不同的二叉搜索树

Scroll Down

题目

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

示例:

输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:

1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3

解答

class Solution {
public:
    unordered_map<int, int> mem;
    int numTrees(int n) {
		if (n == 0) return 1;
		else if (n == 1) return 1;
		else if (n == 2) return 2;
        if (mem.find(n) != mem.end()) return mem[n];
		else  {
			int num = 0;
			for (int i = 0; i < n; i++) {
				num += numTrees(i) * numTrees(n - i - 1);
			}
            mem[n] = num;
			return num;
		}
	}
};