96. Unique Binary Search Trees
来源:互联网 发布:java 调外部接口 编辑:程序博客网 时间:2024/06/05 00:36
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~n这n个数,可以构造出多少种独一无二的搜索二叉树。
分析:
首先该题考察二叉树的构造,但是只要求种类,根据数据结构的内容,如果给定一个序列。比如1,2,3
按照二叉树的概念,树有左子树,根节点,以及右子树构成。而搜索二叉树的定义,要求根节点大于左子树的所有节点,且小于右子树的所有节点,左右子树也满足该条件。设f(x) 表示1~x能构成的二叉树个数
零,如果为空,则只有一种结构,即f(0) = 1;
一,首先分析只有一个结点。
这时,该二叉树只有一种结构
二,如果概述有两个结点
此时容易知道,有两种结构。
划分左右子树
1,左子树[1] 根[2]
2,根[1] 右子树[2]
得f(2) = 2;
三,三个结点,按照分析,我们可以得到如下的划分方式:
1,左子树 [], 根[1],右子树[2,3]
2,左子树 [1], 根[2],右子树[3]
3,左子树 [1,2], 根[3],右子树[]
对于1,右子树,和3中的左子树,就变成了第二种即树中有两个结点。
f(3) = 5;
总结规律,
f(0) = 0;
f(1) = 1;
f(2) = f(1)*f(0) + f(0)*f(1) = 2;
f(3) = f(0)*f(2) + f(1)*f(1) + f(2)*f(0) = 5;
f(x) = f(0)*f(x-1) + f(1)*f(x-2) + ... + f(x-2)*f(1) + f(x-1)*f(0)
代码如下:
<script src="https://code.csdn.net/snippets/1968420.js"></script>
0 0
- 96.Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 【数位计数问题】之【按位求和】
- 通过模板快速生成一个单利(内部类写法)
- Java类与对象
- 20161105学习心得
- std vector与std list的效率比较
- 96. Unique Binary Search Trees
- C#学习笔记之四 C#中数组的创建方法
- hibernate 调用mysql存储过程
- 面向对象六原则
- AVL树实现c++版
- Linux Centos7 nexus搭建maven私服
- Android 上传SVN忽略文件(AS、Eclipse)
- android自定义异常处理与错误日志上传
- [生存志] 第17节 历代大事件概览 西晋