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