【LeetCode】Unique Binary Search Trees (2 solutions)

Unique Binary Search Trees

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

Base case: n==0, n==1时,f(n)==1

递推关系:f(n)=∑f(i)*f(n-i-1)。即以第i个为根节点,左右子树数目相乘。

解法一:递归

class Solution {
public:
    int numTrees(int n) {
        if(n == 0)
            return 1;
        else if(n == 1)
            return 1;
        else
        {
            int ret = 0;
            for(int i = 0; i < n; i ++)
            {//left tree: i nodes; right tree: n-i-1 nodes
                ret += numTrees(i)*numTrees(n-1-i);
            }
            return ret;
        }
    }
};

解法二:动态规划

class Solution {
public:
    int numTrees(int n) {
        if(n==0 || n == 1)
            return 1;

        vector<int> v(n+1, 0);
        v[0] = 1;//n==0
        v[1] = 1;//n==1
        for(int i = 2; i <= n; i ++)
        {//n == i
            for(int j = 0; j < i; j ++)
            {
                v[i] += v[j]*v[i-1-j];
            }
        }
        return v[n];
    }
};

时间: 2024-11-05 04:52:15

【LeetCode】Unique Binary Search Trees (2 solutions)的相关文章

【LeetCode】Unique Binary Search Trees II 不同的二叉查找树II

今早起来做 LeetCode,结果被这道题卡了将近1个半小时,忍着没有去搜答案,最后还是被我想出来了,而且直接一次AC,哈哈!现在在这里记录一下解题思路. 原题: Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example,Given n = 3, your program should return all 5 unique BST's sh

【Leetcode】Unique Binary Search Trees II

题目链接:https://leetcode.com/problems/unique-binary-search-trees-ii/ 题目: Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example, Given n = 3, your program should return all 5 unique BST's shown below.

【leetcode】Unique Binary Search Trees

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. 注意:二分查找树的定义是,左子树节点均小于root,右子树节点均大于root! 不要想当然地将某个点作为root时,认为其他所有节点都能全部放在left/right中,除非这个点是 min 或者

【leetcode】Unique Binary Search Trees (#96)

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  

【leetcode】 Unique Binary Search Trees II (middle)☆

Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example,Given n = 3, your program should return all 5 unique BST's shown below. 1 3 3 2 1 \ / / / \ 3 2 1 1 3 2 / / \ 2 1 2 3 这次的题目要求是得到所有的树. 我的思路: 用f[

【leetcode】 Unique Binary Search Trees (middle)☆

Find the contiguous subarray within an array (containing at least one number) which has the largest product. For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest product = 6. 找数字连续最大乘积子序列. 思路:这个麻烦在有负数和0,我的方法,如果有0,一切都设

【树】Unique Binary Search Trees II

题目: Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example,Given n = 3, your program should return all 5 unique BST's shown below. 1 3 3 2 1 \ / / / \ 3 2 1 1 3 2 / / \ 2 1 2 3 思路: 找到一个数作为根结点,剩余的数分别

【树】Unique Binary Search Trees

题目: 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 思路: 依次把每个节点作为根节点,左边节点作为左子树,右边节点作为右子树,那么总的数目等于左子

【leetcode刷题笔记】Unique Binary Search Trees II

Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example,Given n = 3, your program should return all 5 unique BST's shown below. 1 3 3 2 1 \ / / / \ 3 2 1 1 3 2 / / \ 2 1 2 3 题解:递归的枚举1~n的每个节点为根节点,然后递归