博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode | Unique Binary Search Trees I && II
阅读量:6452 次
发布时间:2019-06-23

本文共 2163 字,大约阅读时间需要 7 分钟。

Unique Binary Search Trees  I 

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

Method I

递归就可以解。每次取出第i个数作为root,[0...i - 1]作为左子树,[i+1...n-1]作为右子树。

class Solution {public:    int numTrees(int n) {        if (n <= 1) {            return 1;        }                int count = 0;        for (int i = 0; i < n; i++) {            count += numTrees(i) * numTrees(n - i - 1);        }        return count;    }};

Method II

动态规划。这其实是一个卡特兰数的例子。和类似。

1 class Solution { 2 public: 3      4     int numTrees(int n) { 5         vector
count(n + 1, 0); 6 count[0] = count[1] = 1; 7 8 for (int i = 2; i <= n; ++i) { 9 for (int j = 0; j < i; ++j) {10 count[i] += count[j] * count[i - j - 1];11 }12 }13 return count[n];14 }15 };

Unique Binary Search Trees  II

 递归,虽然结果很多,但是没办法。从[s,e]中取出第i个数,以[s,i-1]构建左子树,以[i+1,e]构建右子树。组合一下。

1 class Solution { 2 public: 3     vector
generateTrees(int n) { 4 return recursive(1, n); 5 } 6 7 vector
recursive(int s, int e) { 8 vector
ret; 9 if (s > e) {10 ret.push_back(NULL);11 return ret;12 }13 14 for (int i = s; i <= e; ++i) {15 vector
lefts = recursive(s, i - 1);16 vector
rights = recursive(i + 1, e);17 for (int j = 0; j < lefts.size(); ++j) {18 for (int k = 0; k < rights.size(); ++k) {19 TreeNode* root = new TreeNode(i);20 root->left = lefts[j];21 root->right = rights[k];22 ret.push_back(root);23 }24 }25 }26 return ret;27 }28 };

 

转载于:https://www.cnblogs.com/linyx/p/3732281.html

你可能感兴趣的文章
我的友情链接
查看>>
音乐双雄 DynamicLyrics+MusicSeekerX
查看>>
San
查看>>
windbg 如何再内核模式调试用户空间的程序
查看>>
态度是什么
查看>>
Terraform 使用 - 从最简单例子开始
查看>>
杭州楼市是"健康的"
查看>>
Cas3.4 验证码添加!
查看>>
hibernate视图无主键解决办法
查看>>
Android:内存控制及OOM处理
查看>>
希尔排序
查看>>
tomcat7 虚拟主机设置笔记
查看>>
MFC之托盘
查看>>
K8S命令使用
查看>>
dul恢复drop表测试
查看>>
spring boot(1)入门
查看>>
Cmder- ls 命令无法显示中文目录问题
查看>>
一些关于MYSQL语句的编写模板
查看>>
微积分7---极坐标确定切线方程
查看>>
mybatis入门教程(五)----参数之返回值类型
查看>>