码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode: Unique Binary Search Trees [095]

时间:2014-06-01 15:34:24      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:leetcode   算法   面试   

【题目】

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



【题意】

    给定一个数字n, 问用1,2,3,4,5...n这n个值,能构造多少棵合法的二叉搜索树


【思路】

    对于给定[1,n]区间,先确定所有可能的根,假设根为k, 则该二叉树左子树的取值区间为[1, k-1]和右子树的取值区间[k+1, n]。
    而二叉搜索搜索树的任意一个节点的左右子树也是二叉搜索树,因此我们需要确定[1,k-1]和[k+1, n]上构造的二叉搜索树的数目, 比如分别为left[k], right[k]。则以k的根的二叉搜索树的数目即为,left[k]*right[k]
    
    本题用递归来解决。


【代码】

class Solution {
public:
    
    int binaryTreeNums(int start, int end){
        //[start, end]区间上构造二叉树的数目
        if(start>=end)return 1;     //start<end表示空子树, start==end表示叶子节点
        
        int treeNums=0;
        
        for(int root=start; root<=end; root++){
            int leftCount = binaryTreeNums(start, root-1);  //计算左子树的数目
            int rightCount = binaryTreeNums(root+1, end);   //计算右子树的数目
            treeNums+= leftCount*rightCount;
        }
        
        return treeNums;
    }

    int numTrees(int n) {
        if(n==0)return 0;
        return binaryTreeNums(1, n);
    }
};


LeetCode: Unique Binary Search Trees [095],布布扣,bubuko.com

LeetCode: Unique Binary Search Trees [095]

标签:leetcode   算法   面试   

原文地址:http://blog.csdn.net/harryhuang1990/article/details/27958273

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!