N个元素组成二叉树的种类

《算法》中的二叉查找树一节的一道习题。

N个元素组成的二叉树固定一个根节点,这个根节点的左右子树组合数为(0,n-1),(1,n-2),(2,n-3)...(n-1,0),假设N个元素组成的二叉树种类为f[n],则

f[n] = f[0]*f[n-1]+f[1]*f[n-2]+...+f[i]*f[n-1-i](i从0到n-1)

当只有一个节点时f[1]=1,当有两个节点时f[2]=2,假设当n=0时f[0]=1,由此可以得到归纳函数

f[0]=1;f[1]=1;
...
f[n]=f[0]*f[n-1]+f[1]*f[n-2]+...+f[i]*f[n-1-i](i的范围从0带n-1)

这个递推关系符合Catalan number的定义:http://en.wikipedia.org/wiki/Catalan_number

时间: 2024-08-25 05:51:18

N个元素组成二叉树的种类的相关文章

二叉树的二叉链表表示和实现

二叉树的二叉链表存储结构 typedef struct BiTNode { TElemType data; BiTNode * lchild, *rchild;//左右孩子指针 }BiTNode, * BiTree; 二叉链表的22个基本操作 #define ClearBiTree DestroyBiTree//清空二叉树和销毁二叉树的操作一样 void InitBiTree(BiTree &T){ T = NULL; } void DestroyBiTree(BiTree &T){ if

《二叉树的基本操作》

1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 #define NUM 100 //二叉树的最大结点数 6 #define QueueSize 100 //队列初始容量 7 #define TRUE 1 8 #define FALSE 0 9 #define OK 1 10 #define ERROR 0 11 #define OVERFLOW -1 12 13 typedef int

【转载】二叉树的基本概念和实现

原文:二叉树的基本概念和实现 继续是<数据结构算法与应用:C++语言描述>的笔记,这是第八章二叉树和其他树的内容,本节内容介绍树的定义以及二叉树的代码实现. 树 树t是一个非空的有限元素的集合,其中一个元素为根,余下的元素组成t的子树. 在画一棵树时,每个元素都代表一个节点.树根在上面,其子树画在下面.如下图所示,其中,Ann,Mary,John是Joe的 孩子(children) ,而Joe是他们的 父母(parent).有相同父母的孩子是 兄弟(sibling) .Ann,Mary,Joh

数和二叉树(第七章)

树的基本概念 树的定义 数是有n个节点组成的有限集合(记为T).其中 如果n=0,它是一颗空树,这是树的特例 如果n>0,这n个节点中存在(且仅存在)一个节点作为树的根节点,简称为根:其余节点可分为m(m>=0)个互不交集的有限集T1,T2,Tn,其中每个子集本身又是一颗符合本定义的树,称为根的子树 树的定义是递归的 树是一种非线性结构. 树的逻辑表示方法 树形表示法 文氏图表示方法 凹入表示法 括号表示法 树的基本术语 节点的度与树的度:树中某个节点的子树的个数称为该节点的度.树中各节点的度

JAVA实现二叉树(简易版)

个人感觉二叉树的实现主要还是如何构造一颗二叉树.构造二叉树函数的设计方法多种多样.以下程序通过定义内部类来表示二叉树的结点,然后再实现了二叉树这种数据结构的一些基本操作. package tree; public class BinaryTree<E> { //为什么要用静态内部类?静态内部类中不能访问外部类的非静态成员 public static class TreeNode{ // E data; Object data; TreeNode left; TreeNode right; pu

二叉树与其它树

树 树:树是一个非空的有限元素的集合,其中一个元素为根(root),余下的元素(如果有的话)组成t的子树. 层次关系:层次中最高层的元素为根.其下级的元素是余下元素所构成子树的根. 兄弟:有相同父母的孩子为兄弟(sibling) 叶子:树中没有孩子的元素称为叶子. 树根是树中唯一一个没有父节点的元素. 二叉树   概念:t是一个有限个元素的集合(可以为空).当二叉树非空时其中有一个称为根的元素,余下的元素(如果有的话)被组成二个二叉树,分别为t的左子树和右子树. 二叉树与树的根本区别: 二叉树可

HTML5 语义元素(一)页面结构

本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>.<aside>.<figure>.<figcaption>.<footer>.<header>.<main>.<nav>.<section>等元素. 目录 1. 语义元素介绍 1.1 何为语义元素 1.2 特点 2. 原先界面布局 3. 页面结构语意元素 3.1 说明 3.2 详细介绍 3.3 示例图 1. 语义元

二叉树的遍历及线索二叉树

"."代表空树,程序分别以先序.中序和后序的方式递归遍历二叉树,再以中序非递归的方式遍历二叉树,并以中序递归方式输出叶子结点并统计叶子结点的个数.最后将二叉树线索化并中序遍历线索二叉树. #include "stdio.h" #include "stdlib.h" typedef struct bithrnode { char data; int ltag,rtag; struct bithrnode *lchild,*rchild; }Bith

[数据结构与算法] 二叉树及其遍历方式

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4289830.html 一.数据结构分类 (一)按逻辑结构 集合(无辑关系) 线性结构(线性表):数组.链表.栈.队列 非线性结构:树.图.多维数组 (二)按存储结构 顺序(数组)储结构.链式储结构.索引储结构.散列储结构 二.二叉树相关性质