第六章 树和二叉树(2)
数据结构(C语言版)严蔚敏第6章 树和二叉树

⑷ 孩子结点、双亲结点、兄弟结点
一个结点的子树的根称为该结点的孩子结点(child) 或子结点;相应地,该结点是其孩子结点的双亲结点 (parent)或父结点。
4
如图6-1(b)中结点B 、C、D是结点A的子结点,而结 点A是结点B 、C、D的父结点;类似地结点E 、F是结 点B的子结点,结点B是结点E 、F的父结点。
这是树的递归定义,即用树来定义树,而只有 一个结点的树必定仅由根组成,如图6-1(a)所示。
2
2 树的基本术语
⑴ 结点(node):一个数据元素及其若干指向其子树的分支。 ⑵ 结点的度(degree) 、树的度:结点所拥有的子树
的棵数称为结点的度。树中结点度的最大值称为树的度。
A
B
C
D
A
E
F G HI J
同一双亲结点的所有子结点互称为兄弟结点。
如图6-1(b)中结点B 、C、D是兄弟结点;结点E 、 F是兄弟结点。
⑸ 层次、堂兄弟结点
规定树中根结点的层次为1,其余结点的层次等于 其双亲结点的层次加1。
若某结点在第l(l≧1)层,则其子结点在第l+1层。
双亲结点在同一层上的所有结点互称为堂兄弟结点。 如图6-1(b)中结点E、F、G、H、I、J。
(a) 只有根结点
K
LM N
图6-1 树的示例形式
(b) 一般的树
3
如图6-1(b)中结点A的度是3 ,结点B的度是2 ,结点 M的度是0,树的度是3 。
⑶ 叶子(left)结点、非叶子结点:树中度为0的
结点称为叶子结点(或终端结点)。相对应地,度不为 0的结点称为非叶子结点(或非终端结点或分支结点)。 除根结点外,分支结点又称为内部结点。
树和二叉树 PPT课件

C
E
D
F
C
D
C
D
F
E F 二叉链表
E
二叉树
三叉链表
三叉链表的静态结构
root data parent lchild rchild 0 1 2 3 4 5 A B C D E F -1 0 1 1 3 3 1 2 -1 4 -1 -1 -1 3 -1 5 -1 -1
A
B C E D F
0
1 3 7 8 9 4 5
2 6
4. 二叉树的存储结构
顺序表示
1
2 4 5 6 3 7 7 4 8 2 5 9 1 3 6 10 9
8 9 10
1 2 3 4 5 6 7 8 910
完全二叉树 的顺序表示
1 2 3 4 0 5 6 7 8 0 0 0 0 910
一般二叉树 的顺序表示
链表表示
第六章 树和二叉树
1. 2. 3. 4. 5. 6.
树的定义和基本术语 二叉树 遍历二叉树与线索二叉树 树与森林 赫夫曼树 及其应用 二叉树的计数
6.1 树的定义和基本术语
树的定义
树是由 n (n 0) 个结点组成的有限集合。如果 n = 0, 称为空树;如果 n > 0,则 有且仅有一个特定的称之为根(Root)的结点,它只有直 接后继,但没有直接前驱; 当n > 1,除根以外的其它结点划分为 m (m >0) 个互不 相交的有限集 T1, T2 ,…, Tm,其中每个集合Ti本身又是一 棵树,并且称为根的子树(SubTree)。
特点
每个结点至多只有两棵非空子树(二叉树中 不存在度大于2的结点)
2.五种形态
数据库系统l试题库及答案 第6章 树和二叉树

第6章树和二叉树6.1知识点: 树和二叉树的基本概念一、填空题1.高度为h,度为m的树中至少有___________个结点,至多有______________个结点。
2.树的结点是由及若干指向其子树的组成;结点拥有的子树数称为;度为0的结点称为;度不为0的结点成为;树中结点的最大度数称为;树的最大层次称为_____________。
3.对于一棵具有n个结点的树,该树中所有结点的度数之和为___________。
4.如果结点A有3个兄弟结点,而且B是A的双亲,则B的度是___________。
5.二叉树是另一种树形结构,它的特点是。
6.一颗度数为k且有2k-1个结点的二叉树称为。
7.深度为k,且有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时,称之为。
8.一棵深度为6的满二叉树有个分支结点和个叶子。
9.一棵具有257个结点的完全二叉树,它的深度为。
10.设一棵完全二叉树具有1000个结点,则此完全二叉树有个叶子结点,有个度为2的结点,有个结点只有非空左子树,有个结点只有非空右子树。
11.由3个结点可以构成__________种形态的的二叉树,可以构成种形态的树。
12.将含有82个结点的完全二叉树从根结点开始顺序编号,根结点为第1号,其他结点自上向下,同一层自左向右连续编号。
则第40号结点的双亲结点的编号为。
13.一棵高度为5的完全二叉树中,最多包含有____________个结点。
14.一棵具有n个结点的二叉树,若它有n0个叶子结点,则该二叉树上度为1的结点n1=____________。
15.在高度为h(h>=0)的二叉树中至多可以有__________个结点,至少可以有___________个结点。
16.n个结点的二叉树最大高度是____________,最小高度是_______________。
二、选择题1.( )不含任何结点的空树()。
A.是一棵树B.是一棵二叉树C.是一棵树也是一棵二叉树D.既不是树也不是二叉树2.()一棵度为4的树中度为1、2、3、4的结点个数为4、3、2、1,则该树的结点总数为()。
第6章_数据结构习题题目及答案_树和二叉树_参考答案

一、基础知识题6.1设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,求树T中的叶子数。
【解答】设度为m的树中度为0,1,2,…,m的结点数分别为n0, n1, n2,…, nm,结点总数为n,分枝数为B,则下面二式成立n= n0+n1+n2+…+nm (1)n=B+1= n1+2n2 +…+mnm+1 (2)由(1)和(2)得叶子结点数n0=1+即: n0=1+(1-1)*4+(2-1)*2+(3-1)*1+(4-1)*1=86.2一棵完全二叉树上有1001个结点,求叶子结点的个数。
【解答】因为在任意二叉树中度为2 的结点数n2和叶子结点数n0有如下关系:n2=n0-1,所以设二叉树的结点数为n, 度为1的结点数为n1,则n= n0+ n1+ n2n=2n0+n1-11002=2n0+n1由于在完全二叉树中,度为1的结点数n1至多为1,叶子数n0是整数。
本题中度为1的结点数n1只能是0,故叶子结点的个数n0为501.注:解本题时要使用以上公式,不要先判断完全二叉树高10,前9层是满二叉树,第10层都是叶子,……。
虽然解法也对,但步骤多且复杂,极易出错。
6.3 一棵124个叶结点的完全二叉树,最多有多少个结点。
【解答】由公式n=2n0+n1-1,当n1为1时,结点数达到最多248个。
6.4.一棵完全二叉树有500个结点,请问该完全二叉树有多少个叶子结点?有多少个度为1的结点?有多少个度为2的结点?如果完全二叉树有501个结点,结果如何?请写出推导过程。
【解答】由公式n=2n0+n1-1,带入具体数得,500=2n0+n1-1,叶子数是整数,度为1的结点数只能为1,故叶子数为250,度为2的结点数是249。
若完全二叉树有501个结点,则叶子数251,度为2的结点数是250,度为1的结点数为0。
6.5 某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数是多少。
第6章树和二叉树

9
6.1.4 树的存储结构
3.孩子兄弟表示法 孩子兄弟表示法 在结点中设置两个指针域, 在结点中设置两个指针域,一个指针域指向该结 点的第一个孩子,另一个指针域指向其右兄弟。 点的第一个孩子,另一个指针域指向其右兄弟。
2
6.1.1树的定义 树的定义
结点的度:结点所拥有子树的个数称为结点的度。 结点的度:结点所拥有子树的个数称为结点的度。 子树 称为结点的度 树的度:树中所有结点的度的最大值称为树的度。 最大值称为树的度 树的度:树中所有结点的度的最大值称为树的度。 叶结点:度为零的结点称为叶结点。也称终端结点 终端结点或 叶结点:度为零的结点称为叶结点。也称终端结点或叶 子 分支结点:度不为零的结点称为分支结点。也称非终端 分支结点:度不为零的结点称为分支结点。也称非终端 结点。除根结点以外,分支结点也称为内部结点。 结点。除根结点以外,分支结点也称为内部结点。 孩子结点和双亲结点: 孩子结点和双亲结点:树中一个结点的子树的根结点称 为孩子结点。该结点就称为孩子结点的双亲结点。 为孩子结点。该结点就称为孩子结点的双亲结点。 兄弟结点:具有同一双亲的孩子结点互为兄弟结点。 兄弟结点:具有同一双亲的孩子结点互为兄弟结点。 结点的祖先:从根到该结点所经分支上的所有结点, 结点的祖先:从根到该结点所经分支上的所有结点,称 为结点的祖先。 为结点的祖先。
17
6.2.2 二叉树的性质
性质4 具有n( 性质 具有 (n>0)个结点的完全二叉树的深度 )个结点的完全二叉树的深度h= log 2 n + 1 证明: 证明: 根据完全二叉树的定义可知深度为h-1层及以上的结点构成 根据完全二叉树的定义可知深度为 层及以上的结点构成 满二叉树,因此由性质2得深度为 得深度为h的完全二叉树满足 满二叉树,因此由性质 得深度为 的完全二叉树满足 n>2h-1-1和n≤2h-1 和 整理后得到 2h-1≤n<2h 不等式两边取对数, 不等式两边取对数,得 h-1≤log2n<h 由于h为正整数 为正整数, 由于 为正整数,因此 h= log 2 n + 1
tree2_

根节点有右孩子吗?
6.4.2 森林和二叉树的转换
森林和二叉树的转换
树 与 二 叉 树
6.4.3 树和森林的遍历
树的遍历
先根遍历 后跟遍历
先根遍历:RADEBCFGHK 后根遍历:DEABGHKFCR
6.3 遍历二叉树 6.4 树和森林
树的存储结构 树和森林的转换 树和森林的ห้องสมุดไป่ตู้历
6.5 6.6 6.7 6.8
树与等价问题 哈夫曼树及其应用 回溯法与树的遍历 树的计数
6.4.1 树的存储结构
双亲表示法
便于涉及双亲的操作 求结点的孩子时需要遍历整棵树
//-----------树的双亲表存储表示----------// #define MAX_TREE_SIZE 100 typedef struct PTNode { TElemType data; int parent; //双亲位置域 }PTNode; typedef struct{ PTNode nodes[MAX_TREE_SIZE]; int r,n; //根的位置和结点数 }PTree;
线索链表的存储结构
//Link==0:指针,Thread==1:线索
typedef enum {Link,Thread} PointerTag; typedef struct BiThrNode { TElemType data; struct BiThrNode *lchild,*rchild; //左右孩子指针 PointerTag LTag, RTag; //左右标志 }BiThrNode, *BiThrTree;
中序线索二叉树
NIL a + e / * b f 1 b 1 中序遍历:a+b*c-d-e/f NIL + *
第6章树和二叉树(2)培训讲学

第6章树和二叉树(2)第六章树和二叉树一、选择题1.算术表达式a+b*(c+d/e)转为后缀表达式后为()A.ab+cde/* B.abcde/+*+ C.abcde/*++ D.abcde*/++2. 设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是()A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定3.若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为()。
A.n-1 B.⎣n/m⎦-1 C.⎡(n-1)/(m-1)⎤ D.⎡n/(m-1)⎤-1E.⎡(n+1)/(m+1)⎤-14.深度为h的满m叉树的第k层有()个结点。
(1=<k=<h)A.m k-1 B.m k-1 C.m h-1 D.m h-15. 若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为( )A.X的双亲B.X的右子树中最左的结点C.X的左子树中最右结点D.X的左子树中最右叶结点6. 引入二叉线索树的目的是()A.加快查找结点的前驱或后继的速度 B.为了能在二叉树中方便的进行插入与删除C.为了能方便的找到双亲 D.使二叉树的遍历结果唯一7.由3 个结点可以构造出多少种不同的二叉树?()A.2 B.3 C.4 D.58.下述编码中哪一个不是前缀码()。
A.(00,01,10,11) B.(0,1,00,11) C.(0,10,110,111)D.(1,01,000,001)二、判断题1. 给定一棵树,可以找到唯一的一棵二叉树与之对应。
2.将一棵树转成二叉树,根结点没有左子树;3. 在中序线索二叉树中,每一非空的线索均指向其祖先结点。
4. 一棵哈夫曼树的带权路径长度等于其中所有分支结点的权值之和。
5.当一棵具有n个叶子结点的二叉树的WPL值为最小时,称其树为Huffman树,且其二叉树的形状必是唯一的。
三、填空题1.一棵树T中,包括一个度为1的结点,两个度为2的结点,三个度为3的结点,四个度为4的结点和若干叶子结点,则T的叶结点数为___ ___。
数据结构考试题库含答案

数据构造习题集含答案目录目录1选择题2第一章绪论2第二章线性表4第三章栈和队列6第四章串7第五章数组和广义表8第六章树和二叉树8第七章图11第八章查找13第九章排序14简答题19第一章绪论19第二章线性表22第三章栈和队列24第四章串26第五章数组和广义表27第六章树和二叉树28第七章图31第八章查找31第九章排序32编程题34第一章绪论34第二章线性表34第三章栈和队列45第四章串45第五章数组和广义表45第六章树和二叉树45第七章图45第八章查找45第九章排序50选择题第一章绪论1.数据构造这门学科是针对什么问题而产生的?〔A 〕A、针对非数值计算的程序设计问题B、针对数值计算的程序设计问题C、数值计算与非数值计算的问题都针对D、两者都不针对2.数据构造这门学科的研究容下面选项最准确的是〔D 〕A、研究数据对象和数据之间的关系B、研究数据对象C、研究数据对象和数据的操作D、研究数据对象、数据之间的关系和操作3.*班级的学生成绩表中查得三同学的各科成绩记录,其中数据构造考了90分,则下面关于数据对象、数据元素、数据项描述正确的选项是〔C 〕A、*班级的学生成绩表是数据元素,90分是数据项B、*班级的学生成绩表是数据对象,90分是数据元素C、*班级的学生成绩表是数据对象,90分是数据项D、*班级的学生成绩表是数据元素,90分是数据元素4.*数据构造是指〔A 〕。
A、数据元素的组织形式B、数据类型C、数据存储构造D、数据定义5.数据在计算机存储器表示时,物理地址与逻辑地址不一样,称之为〔C 〕。
A、存储构造B、逻辑构造C、链式存储构造D、顺序存储构造6.算法分析的目的是〔C 〕A、找出数据的合理性B、研究算法中的输入和输出关系C、分析算法效率以求改良D、分析算法的易懂性和文档型性7.算法分析的主要方法〔A 〕。
A、空间复杂度和时间复杂度B、正确性和简明性C、可读性和文档性D、数据复杂性和程序复杂性8.计算机部处理的根本单元是〔B 〕A、数据B、数据元素C、数据项D、数据库9.数据在计算机有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要〔B 〕。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南理工学院信息与通信工程学院
9
p A B p A
B D i
C F G P->A (1) E G D F i P->B P->A (2)
C E
A
p C E G B D F (3) i P->C P->B P->A C B
A
D F G
i P->B P->A 访问:C
p=NULL E
(4)
p B C E
A)A B C D E F G H I J B)A B D E G H J C F I C)A B D E G H J F I C D)A B D E G J H C F I
A
B D E
C F I J
G
H
湖南理工学院信息与通信工程学院
17
数据结构
二叉树遍历的应用
在计算机中可以用树结构来表示算术表达式 (1)表达式中的每一个运算符在树中对应一个结点,称 为运算符结点。 (2)运算符的每一个运算对象在树中为该运算符结点的 子树(在树中的顺序为从左到右)。 (3)运算对象中的单变量均为叶子结点。
后序遍历(LRD)练习
A B D E C
F
G
D, G, E, B, F, C,A A,B,D,C,H,P,G,E,F
湖南理工学院信息与通信工程学院
16
数据结构
假设一棵二叉树的后序遍历序列为D G J H E B I F C A, 中序遍历序列为D B G E H J A C I F,则其前序遍历序列 为 。
中序遍历: a + b * c - d - e / f
f 后序遍历: a b c d - * + e f / 层次遍历:
e
-+/a*efb-cd
湖南理工学院信息与通信工程学院
21
数据结构
线索二叉树
1.基本概念 二叉树的遍历运算是将二叉树中结点按一定规律线性 化的过程。当以二叉链表作为存储结构时,只能找到结点 的左、右孩子信息,而不能直接得到结点在遍历序列中的 前驱和后继信息。要得到这些信息,第一种方法是将二叉 树遍历一遍,在遍历过程中便可得到结点的前驱和后继, 但这种动态访问浪费时间;第二种方法是充分利用二叉链 表中的空链域,将遍历过程中结点的前驱、后继信息保存 下来。
湖南理工学院信息与通信工程学院
24
数据结构
typedef struct node { char data; struct node *lchild,*rchild; int ltag,rtag; }thbitree;
ltag data rtag lchild rchild
湖南理工学院信息与通信工程学院
湖南理工学院信息与通信工程学院
22
数据结构
在有n个结点的二叉链表中共有2n个链域,但n+1个 链域是空的。我们可以利用n+1个空链域来存放遍历过 程中结点的前驱和后继信息。 现作如下规定: 若结点有左子树,则其LChild域指向其左孩子,否则 LChild域指向其前驱结点;若结点有右子树,则其 RChild域指向其右孩子,否则RChild域指向其后继结点。
湖南理工学院信息与通信工程学院
23
数据结构
为了区分孩子结点和前驱、后继结点,为结点结构增设 两个标志域,如下图所示:
LChild Ltag Data Rtag RChild
0
LChild域指示结点的左孩子
Ltag=
1
0
LChild域指示结点的遍历前驱
RChild域指示结点的右孩子
Rtag=
1
RChild域指示结点的遍历后继
B
C D
E
G P=NULL A B
F
P->D P->A
访问:C B E G (10)
p D i
C F G
B D E F p i P->F P->A 访问:C B E G D
C
E (11)
P->A 访问:C B E G D
(12)
G
p A B A
B D
C i F p=NULL G D
C E
(13)
E P->A
数据结构
第六章 树和二叉树
树的定义与基本操作
二叉树 树和森林 哈夫曼树与哈夫曼编码
湖南理工学院信息与通信工程学院
1
数据结构
二叉树的遍历
二叉树的遍历:按一定规律对二叉树中的每个结点进行访 问且仅访问一次。 从二叉树的定义知,一棵二叉树由三部分组成:根结点、 左子树和右子树。若规定D,L,R分别代表“访问根结点”、 “遍历左子树”和“遍历右子树”,则其遍历二叉树的方案 有6种。 若限定先左后右,则只有前3种情况,分别称为:
D
前序遍历(DLR)
L R
中序遍历(LDR) 后序遍历(LRD)
湖南理工学院信息与通信工程学院
DLR、LDR、LRD RDL、RLD、DRL
2
数据结构
1.前序遍历(DLR)
若二叉树为空,则结束返回。否则: (1)访问根结点; (2)前序遍历左子树; D L (3)前序遍历右子树。
A A D C L R
先序序列:A
B D C
printf(C); pre(T L); pre(T R);
T
返回
数据结构
2.中序遍历(LDR)
D R
若二叉树为空,则结束返回。否则: L (1)中序遍历左子树; (2)访问根结点; (3)中序遍历右子树。
L D R A B
A
L D R
L D R B C
C
D
D
中序遍历序列:B D A C
R
D
L R
B
B
D L R
C
D
先序遍历序列:A B
D
C
D
3
湖南理工学院信息与通信工程学院
数据结构
前序遍历(DLR)练习
A B D G E C F
A, B, D, E, G, C, F
F, C, A, D, B, E, G, H, P
4
湖南理工学院信息与通信工程学院
数据结构
前序遍历(DLR)递归算法
湖南理工学院信息与通信工程学院
7
数据结构
中序遍历(LDR)练习
A B D E
C
F
G
D,B,G,E,A,C,F A,C,B,D,F,E,H,G,P
湖南理工学院信息与通信工程学院
8
数据结构
中序遍历(LDR)非递归算法
二叉树的中序遍历的非递归算法,需要用到一个栈S。 其算法的执行步骤如下: (1) 当树非空时,将指针p指向根结点,p为当前结点指针。 (2) 将p压入栈S中,并令p指向其左孩子。 (3) 重复执行步骤(2),直到p为空。 (4) 从栈S中弹出栈顶元素,将p指向此元素。 (5) 访问当前结点p,并将p指向其右孩子。 (6) 重复执行步骤(2)-(5),直到p为空并且栈S也为空。 (7) 遍历结束。
25
数据结构
先序线索二叉树
0 A 0
A B D F E C
0 B 1
0 C 1
1 D 0
1
E 1
Null
1
F 1
先序遍历序列:ABDFCE
湖南理工学院信息与通信工程学院
26
数据结构
中序线索二叉树
0 A 0
A B D F E C
0 B 1
0 C 1
1 D 0
Null
1
E 1
Null
1
F 1
中序遍历序列:DFBAEC
湖南理工学院信息与通信工程学院
5
void preorderTraverse (BiTree*bt) { if(bt!=NULL) 左是空返回 { printf("%d\t",bt->data); preorderTraverse (bt->lchild); preorderTraverse (bt->rchild);
void PreOrderTraverse(BiTree BT)
/*前序遍历二叉树, BT为指向二叉树(或某一子树)根结点的指针*/
{ if (BT!=NULL) {
Visit(root ->data); /*访问根结点*/
PreOrderTraverse (BT ->LChild); /*前序遍历左子树*/ PreOrderTraverse (BT ->RChild); /*前序遍历右子树*/ } }
T 返回 T B
A B C
左是空返回 右是空返回
D
}
}
主程序 Pr L); pre(T R);
printf(B); pre(T L); pre(T R); T C
左是空返回 T D 右是空返回 T printf(D); 返回 pre(T L); pre(T R); T 返回 T 返回
湖南理工学院信息与通信工程学院
27
数据结构
后序线索二叉树
0 A 0
A B D E
0 B 1
C
0 C 1
1 D 0
1
E 1
F
1
F 1
后序遍历序列:FDBECA Null
湖南理工学院信息与通信工程学院
28
湖南理工学院信息与通信工程学院
14
数据结构
3.后序遍历(LRD)
R D
若二叉树为空,则结束返回。否则: L (1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点。
L R D A L R D B C D D
A
L R D