社区
数据结构与算法
帖子详情
6个结点可构造出多少种不同形态的二叉树?
goodmrning
2008-01-11 10:13:03
如题
...全文
3598
7
打赏
收藏
6个结点可构造出多少种不同形态的二叉树?
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
goodmrning
2008-01-14
打赏
举报
回复
谢谢楼上
medie2005
2008-01-13
打赏
举报
回复
Catalan(n)=C(2n,n)/(n+1).
于是,6个结点的二叉树个数是Catalan(6)=C(12,6)/7=132。
goodmrning
2008-01-13
打赏
举报
回复
不对啊
有没有哪位高手说说解题过程?
Johnny_de
2008-01-13
打赏
举报
回复
121
mmmcd
2008-01-12
打赏
举报
回复
看看二叉树与Catalan数相关资料
http://student.zjzk.cn/course_ware/data_structure/web/DOWNLOAD/%CA%FD%BE%DD%BD%E1%B9%B9%D3%EB%CB%E3%B7%A82.htm
goodmrning
2008-01-11
打赏
举报
回复
高手帮忙啊
是不是嫌分少?
明天加分!!!!!!!!!!!!!!!
grellen
2008-01-11
打赏
举报
回复
顶一下
数据结构 课后题答案(第3章)1
第三章3.1(1)n 个
结点
可
构造
出
多少
种
不同
形态
的
二叉树
?解:当 n=1 时,只有 1 个根节点,则只能组成 1
种
形态
的
二叉树
,令 n 个节点可组成的
二叉树
二叉树
的
不同
形态
_
二叉树
的
不同
形态
_
给定
二叉树
T(树深度H<=10,深度从1开始,
结点
个数N<1024,
结点
编号1~N)的层次遍历序列和中序遍历序列,输
出
T从左向右叶子
结点
以及
二叉树
先序和后序遍历序列。输入格式输入共三行:第一行是整数n,表示
二叉树
中的
结点
数目;第二行有n个整数,表示该
二叉树
的层次遍历序列;第三行也是n个整数,表示该
二叉树
的中序遍历序列。整数间以空格隔开。输
出
格式输
出
三行,分别是:从左向右的叶子
结点
,先序遍历序列,后序遍历序列。
结点
编号用空格隔开。
数据结构基础系列(6):树和
二叉树
数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第6部分“树和
二叉树
”,介绍树的相关概念和表示方法,重点是二叉事的性质、存储结构、遍历等基本操作的实现,以及应用基本操作解决问题的方法。
[详细完整版]数据结构07.doc
第七章 树和
二叉树
习题 7.1画
出
由4个
结点
所构成的所有
形态
的树(假设是无序树)。 7.2已知一棵树的度为4,其中度为4的
结点
的数目为3,度为3的
结点
的数目为4,度为 2的
结点
的数目为5,度为1的
结点
的数目为2,请求
出
该树中的叶子
结点
的数目。 7.3如果已知一棵
二叉树
有20个叶子
结点
,有10个
结点
仅有左孩子,15个
结点
仅有右 孩子,求
出
该
二叉树
的
结点
数目。 7.4已知某完全
二叉树
有100个
结点
,试用三
种
不同
的方法求
出
该
二叉树
的叶子
结点
数 。 7.5如果已知完全
二叉树
的第6层有5个叶子,试画
出
所有满足这一条件的完全
二叉树
,并指
出
结点
数目最多的那棵完全
二叉树
的叶子
结点
数目。 7.6在编号的完全
二叉树
中,判断编号为i和j的两个
结点
在同一层的条件是什么? 7.7设计算法以求解编号为i和j的两个
结点
的最近的公共祖先
结点
的编号。 7.8分别求
出
下图中
二叉树
的三
种
遍历序列。 7.9分别描述满足下面条件的
二叉树
的特征: (1)先序序列和中序序列相同。 (2)先序序列和后序序列相反。 7.10证明:由
二叉树
的先序序列和中序序列能唯一确定一棵
二叉树
,并分别由下面的 两个序列
构造
出
相应的
二叉树
: 先序:A
第五章 树与
二叉树
5.1 数的逻辑结构 5.1.1 1、树的定义 在树中常常将数据元素称为
结点
(1)有且仅有一个特定的称为根的
结点
; (2)当n>1时,除根
结点
之外的其余
结点
被分成m(m>0)个互不相交的有限集合T1,T2,•••Tm,其中每个集合又是一棵树,并称为这个节点的子树。 2、树的基本术语:
结点
的度、树的度 叶子节点、分支
结点
孩子节点、分支
结点
、兄弟节点 路径、路径长度 祖先、子孙
结点
的层数、树的深度(高度) 层序编号 有序树、无序树 森林 5.1.2 树的抽象数据类型定义 5.1.3树的遍历操作 1、前序遍历 树的前序遍历操作定义为: 若树为空,则空操作返回;否则 (1)访问根
结点
(2)按照从左向右的顺序前序遍历根
结点
的每一棵子树。 2、中序遍历 树的中序遍历操作定义为: 若树为空,则空操作返回;否则 (1)按照从左向右的顺序后序遍历根
结点
的每一棵子树; (2)访问根
结点
。 3、层序遍历 树的层序遍历也称作树的广泛遍历,其操作定义为树的第一层开始,自上而下逐层遍历,在同一层中,按从左向右的顺序对
结点
逐个访问。 5.2树的存储结构 5.2.1 双亲表示法 由树的定义可知,树中每个
结点
都有且仅有一个双亲
结点
。所以利用这一特性,可以用一维数组来存储各个
结点
,数组中一个元素对应一个
结点
,数组元素包括树中
结点
的数据信息以及该
结点
的双亲在数组中的下标。 其中: Data为数据域,存储树中
结点
的数据信息; Parent为指针即游标,存储该
结点
的双亲在数组中的小标。 5.2.2孩子表示法 1、多重链表表示法 (1)指针域的个数等于该
结点
的度。 (2)指针域的个数等于树的度。 2、孩子链表表示法 把孩子看成一个线性表,且以单链表存储,称为该
结点
的孩子链表。则n个
结点
有n个孩子链表。 孩子节点有两类:孩子节点、表头
结点
。 5.2.3 双亲孩子表示法 即将双亲表示法和孩子链表表示法相结合的存储方法。仍将各
结点
的孩子分别组成单链表,同时用一维数组顺序存储树中的各
结点
,数组元素除了包括
结点
的数据信息和该
结点
的孩子链表的头指针之外,还增设一个域存储该
结点
的双亲在数组的下标。 5.2.4孩子兄弟表示法 又称二链表表示法,其方法是链表中每个
结点
除数据域外,还设置了两个指针分别指向该
结点
的第一个孩子和右兄弟链表的结构: Firstchild data rightsib 指针域,存储第一个孩子
结点
的存储地址 数据域,存储该
结点
的数据信息 指针域,存储该
结点
右兄弟
结点
的存储地址 5.3
二叉树
的逻辑结构 最简单的树结构,特别适合计算机处理,而且任何数都可以简单的转换为
二叉树
。(重点内容) 5.3.1
二叉树
的定义
二叉树
是n(n>=0)个
结点
的有限集合,该集合或者为空集,或者有一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的
二叉树
组成。
二叉树
具有五
种
基本
形态
: 1、空
二叉树
; 2、只有一个根
结点
; 3、根
结点
只有左子树; 4、根
结点
只有右子树; 5、根
结点
既有左子树又有右子树 特殊
二叉树
: 1、斜树; 2、满
二叉树
; 3、完全
二叉树
; 5.3.2
二叉树
的基本性质 性质5-1
二叉树
的第i层上最多有2^(i-1)个
结点
(i>=1)。 性质5-2 在一棵深度为k的
二叉树
中,最多有2^k-1个
结点
,最少有k个
结点
。 性质5-3 在一棵
二叉树
中,如果叶子
结点
的个数为n0,度为2的
结点
个数为n2,则n0=n2+1. 性质5-4 具有n个
结点
的完全
二叉树
的深度为【log2^n】+1。 性质5-5 对一棵具有n个
结点
的完全
二叉树
中的
结点
从一开始按层序编号,则对于任意的编号为i(1<=i<=n)的
结点
,有: (1)如果i>1,则
结点
i的双亲的编号为【i/2】;否则
结点
i是根
结点
,无双亲。 (2)如果2i<=n,则
结点
i的左孩子的编号为2i;否则
结点
i无左孩子。 (3)如果2i+1<=n,则
结点
i的右孩子的编号为2i+1,否则
结点
i无右孩子。 5.3.3
二叉树
的抽象数据类型定义 同树类似,在
不同
的应用中,
二叉树
的基本操作不尽相同。 5.3.4
二叉树
的遍历操作
二叉树
的遍历是指从根节点
出
发,按照某
种
次序访问
二叉树
是所有
结点
,使得每个
结点
被访问一次且仅被访问一次。由于
二叉树
中每个
结点
都可能有两个子树,因此需要寻找一条合适的搜索路径。 1、前序遍历 前序遍历
二叉树
操作定义为: 若树为空,则空操作返回;否则 (1)访问根
结点
(2)前序遍历根
结点
的左子树 (3)前序遍历根
结点
的右子树 2、中序遍历 中序遍历
二叉树
操作定义为: 若树为空,则空操作返回;否则 (1)中序遍历根
结点
的左子树 (2)访问根
结点
(3)中序遍历根
结点
的右子树 3、后序遍历 后序遍历根
结点
的左子树 后序遍历根
结点
的右子树 访问根
结点
4、层序遍历
二叉树
的层序遍历是指从
二叉树
的第一层开始,从上之下逐层遍历,在同一层中,按从左到右的顺序对
结点
逐个访问。 5.4
二叉树
存储结构及实现 5.4.1 顺序存储结构 具体步骤: (1)将
二叉树
按完全
二叉树
编号。 (2)将
二叉树
中的
结点
一编号顺序存储到一维数组中。 5.4.2 二叉链表 基本思想: 令
二叉树
的每个
结点
对应一个链表
结点
,链表
结点
除了存放于
二叉树
结点
有关的数据信息外,还要设置指示左右孩子的指针。 5.4.3 三叉链表 在二叉链表存储方式下,从某个
结点
出
发可以直接访问它的孩子
结点
,但要找到它的双亲
结点
,则需要从根节点开始搜索,最坏的情况下,需要遍历整个二叉链表。此时采用三叉树链表储存
二叉树
。 其中,data,lchild,rchild三个域的含义同
二叉树
,parent域为指向该
结点
的双亲
结点
指针。 5.4.4 线索链表 按照某
种
遍历次序对
二叉树
进行遍历,可以把
二叉树
中所有
结点
排成一个线性序列。在集体应用中,有时需要访问
二叉树
中的
结点
在某
种
遍历序列中前驱和后继,此时,在存储结构中应该保存
结点
在某
种
遍历序列中的前驱和后继信息。 前驱和后继
结点
的指针称为线索,加上线索的
二叉树
称为线索
二叉树
,加上线索的二叉链表称为线索链表。 5.5
二叉树
遍历的非递归算法 5.5.1 前序遍历非递归算法 关键:在前序遍历过某个左子树后,如何找到该
结点
的右子树的根指针。 一般的前序遍历执行过程中,设要遍历
二叉树
的根指针为bt,可能
出
现两
种
情况: (1)若bt!=NULL,则表明当前
二叉树
不为空,此时,应输入根
结点
bt的值并将bt保存到栈中,准备继续遍历bt的左子树。 (2)若bt=NULL,则表明以bt为根指针的
二叉树
遍历完毕,并且bt是栈顶指针所指
结点
的左子树,若栈不空,则应根据栈顶指针所指
结点
找到待遍历右子树的根指针并赋予bt,以继续遍历下去;若栈空,则表明整个
二叉树
遍历完毕。 5.5.2 中序遍历非递归算法 此算法只是需要将前序遍历的非递归算法中输
出
的语句cout<
data移到bt=s[top--]之后即可。 5.5.3 后序遍历非递归算法 后序遍历的
不同
在于:
结点
要
出
入两次栈,
出
两次栈,这
种
情况的含义和处理方法为: (1)第一次
出
栈:只遍历晚左子树,右子树尚未遍历,则该
结点
不
出
栈,利用栈顶
结点
找到它的右子树,准备遍历它的右子树。 (2)第二次
出
栈:遍历完右子树,该
结点
出
栈,并访问它。 设根指针为bt,则可能有以下两
种
情况: (1)若bt!=NULL,则bt及标志flag入栈,遍历其左子树。 (2)若bt=NULL,此时栈空,则整个遍历结束;若栈不空,则表明栈顶
结点
的左子树或右子树已遍历结束。若栈顶点的标志flag=1,则表明栈
结点
的左子树已遍历完毕,将flag修改为2,修改为2,并遍历栈定点的右子树;若栈顶
结点
的标志flag=2,则表明栈
结点
的右子树也遍历完毕,输
出
栈顶
结点
。 5.6 树、森林与
二叉树
的转换 1.树转换为
二叉树
将一棵树转换为
二叉树
的方法为: (1)加线——树中所有相邻的兄弟
结点
之间加一条线; (2)去线——对树中的每个节点,只保留它与第一个孩子
结点
之间的连线,删去它与其他孩子
结点
之间的连线。 (3)层次调节——以根
结点
为轴心,将树顺时针转动一定角度,使之层次分明。 2.森林转换成
二叉树
(1)将森林中的每一棵
二叉树
转化成
二叉树
; (2)从第二课
二叉树
开始,依次把后一棵
二叉树
的根
结点
作为一棵
二叉树
根节点的右孩子,当所有
二叉树
连起来后,此时所得到的
二叉树
就是由森林转换得到的
二叉树
。 3、
二叉树
转换为树或森林 (1)加线——若某个
结点
x是其双亲y的左孩子,则把
结点
x的右孩子、右孩子的右孩子、……,都与
结点
y用线连起来; (2)去线——删去原
二叉树
中所有的双亲
结点
与右孩子
结点
的连线; (3)层次调整——整理由(1)、(2)两步所得到的树或森林,使之层次分明。 (4)森林的遍历 两
种
遍历方法;前序遍历后续遍历。 5.7 应用举例 5.7.1
二叉树
的应用举例——哈夫曼及哈夫曼编码 1、哈夫曼树也称最优
二叉树
,在实际中有着广泛的应用。 叶子节点的权值 是对叶子
结点
赋予的一个有意义的数值量。
二叉树
的带权路径长度 设
二叉树
具有n个带权值的叶子节点,从根节点到叶子节点的路径长度与相应的叶子节点权值的乘积之和叫做
二叉树
的带权路径长度,记为: WPL=EWkLk 哈夫曼树 给定一组具有确定权值的叶子
结点
,可以
构造
出
不同
的
二叉树
,将其中带权值路径长度最小的
二叉树
称为哈夫曼树。 哈夫曼算法基本思想: (1)初始化:由给定的n个权值
构造
n棵只有一个根
结点
的
二叉树
,从而得到一个
二叉树
集合。 (2)选取与合并:在F中选取根
结点
的权值最小的两棵
二叉树
分别作为左、右子树
构造
一棵新的
二叉树
,这棵新的
二叉树
的根
结点
的权值为其左右子树根
结点
的权值之和。 (3)删除与加入:在F中删除作为左、右子树的两棵
二叉树
,并将新建的
二叉树
加入到F中。 (4)重复(2)(3)两步的操作,当集合F只剩下一棵
二叉树
时这棵
二叉树
便是哈夫曼树。 2、哈夫曼编码 在进行程序设计时,通常给每一个字符记一个单独的代码来表示一组字符,我们称之为编码。
数据结构与算法
33,006
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章