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

本文共 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

你可能感兴趣的文章
VMware vCenter 5.5 – You do not have permission to login to the server
查看>>
Linux之用户管理
查看>>
菜鸟学Linux 第045篇笔记 openSSH
查看>>
6.1 shell编程4
查看>>
安装gitlab
查看>>
Win8Metro(C#)数字图像处理--2.5图像亮度调整
查看>>
Java并发编程:Callable、Future和FutureTask的实现
查看>>
SXS完全查杀+预防方案2
查看>>
判断ORACLE启动时使用spfile还是pfile
查看>>
那些年出海的中国SaaS怎样了
查看>>
路由基础
查看>>
centos7 源码安装php7
查看>>
Vuex + axios 发送请求
查看>>
centos7下inotify+svn、inotify+rsync的配置
查看>>
solr搜索之demo和集成IKAnalyzer(二)
查看>>
XenServer 6.5实战系列:Creating a VM Template from a VM Snapshot
查看>>
使用harbor配置docker registry
查看>>
怎么把输入的以逗号隔开的多个字符串拆开
查看>>
谨慎使用MYSQL表分区
查看>>
确定elk中的数据存储的位置-和增加集群节点
查看>>