LeetCode 之 Unique Binary Search Trees

原创 2013年12月04日 15:03:41

原题:

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
这个题比较简单,用递归直接搞定,为了防止超时,需要加一个记录

解题思路:

1 对1-n中的每一个数,都可能是根节点,然后比其小的一定是在该根节点的左侧,比其大的在根节点的右侧。

2 如果只有一个元素,返回1

3 我用的是一个比较笨的方法,比如对数组1-n,现在i为根节点,则1~i-1都为其左节点,i+1 ~ n都为其右节点,然后对左右节点分别递归处理就行了,然后把左右子树的结果相乘得到i为根节点的情况数

4 把i从1到n的所有情况数加起来就是最后结果

5 我声明了一个二维数组record[][],record[i][j]代表起点为i,终点为j的所有可能数,如果i>j说明是在考虑边界情况(如在考虑1或者n),返回1说明就是其的左子树或右子树情况(为空,只有一种情况)

代码如下(12ms):

class Solution {
public:
    int numTrees(int n) {
        int ** record = new int*[n+1];
        for(int i = 0; i <= n ;i++){
            record[i] = new int [n+1]();
        }
        for(int i = 0 ;i <=n ; i++){
            for(int j = 0; j<=n;j++){
                record[i][j]=-1;
            }
        }
        
        return getNum(1,n , record);
    }
    int getNum(int start , int end , int **record){
        if(start >= end) return 1;
        if(record[start][end] >0 ) return record[start][end]; 
        
        int result = 0;
        for(int i = start ; i<= end ; i++){
            result += getNum(start , i-1 , record) * getNum(i+1, end , record);
        }
        record[start][end] = result;
        return result;
    }
};

LeetCode - Unique Binary Search Trees

题目原文:     Given n, how many structurally unique BST's (binary search trees) that store values 1...n...

Leetcode-96.Unique Binary Search Trees

题目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? Fo...

leetcode_middle_98_95. Unique Binary Search Trees II

题意: 给一个数n,返回所有能存储1到n的二叉查找树。 分析: 这是个好题,应该考虑深度优先搜索或者动态规划。 递归好理解: 遍历1到n每个数做结点。 对于每一个根节点,将左边的结点能构造出的...
  • pusude
  • pusude
  • 2017年03月10日 14:06
  • 149

LeetCode 96. Unique Binary Search Trees 解题报告

LeetCode 108. Convert Sorted Array to Binary Search Tree 解题报告

[LeetCode] Unique Binary Search Trees n结点二叉搜索树的数目

声明:原题目转载自LeetCode,解答部分为原创 Problem : Given n, how many structurally unique BST's (binary ...
  • xblog_
  • xblog_
  • 2017年04月03日 21:04
  • 80

[Leetcode] 95. Unique Binary Search Trees II 解题报告

题目: Given an integer n, generate all structurally unique BST's (binary search trees) that store...

Leetcode-Unique Binary Search Trees

作者:disappearedgod 文章出处:http://blog.csdn.net/disappearedgod/article/details/23621903 时间:2014-6-5 ...

Unique Binary Search Trees (leetcode) 动态规划

有多少种不同的二叉搜索树?动态规划问题Unique Binary Search Trees题目地址 https://leetcode.com/problems/unique-binary-searc...

LeetCode Unique Binary Search Trees

Unique Binary Search Trees   Given n, how many structurally unique BST's (binary search trees) th...

LeetCode Unique Binary Search Trees II

题目 Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode 之 Unique Binary Search Trees
举报原因:
原因补充:

(最多只允许输入30个字)