第六章+树_1 (1)
数据结构(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的结点称为非叶子结点(或非终端结点或分支结点)。 除根结点外,分支结点又称为内部结点。
数据结构练习题--树(题)
第六章树一.名词解释:1 树 2。
结点的度 3。
叶子 4。
分支点 5。
树的度6.父结点、子结点 7兄弟 8结点的层数 9树的高度 10 二叉树11 空二叉树 12 左孩子、右孩子 13孩子数 14 满二叉树 15完全二叉树16 先根遍历 17 中根遍历 18后根遍历 19二叉树的遍历 20 判定树21 哈夫曼树二、填空题1、树(及一切树形结构)是一种“________”结构。
在树上,________结点没有直接前趋。
对树上任一结点X来说,X是它的任一子树的根结点惟一的________。
2、一棵树上的任何结点(不包括根本身)称为根的________。
若B是A的子孙,则称A是B的________3、一般的,二叉树有______二叉树、______的二叉树、只有______的二叉树、只有______ 的二叉树、同时有______的二叉树五种基本形态。
4、二叉树第i(i>=1)层上至多有______个结点。
5、深度为k(k>=1)的二叉树至多有______个结点。
6、对任何二叉树,若度为2的节点数为n2,则叶子数n0=______。
7、满二叉树上各层的节点数已达到了二叉树可以容纳的______。
满二叉树也是______二叉树,但反之不然。
8、具有n个结点的完全二叉树的深度为______。
9、如果将一棵有n个结点的完全二叉树按层编号,则对任一编号为i(1<=i<=n)的结点X有:(1)若i=1,则结点X是______;若i〉1,则X的双亲PARENT(X)的编号为______。
(2)若2i>n,则结点X无______且无______;否则,X的左孩子LCHILD(X)的编号为______。
(3)若2i+1>n,则结点X无______;否则,X的右孩子RCHILD(X)的编号为______。
10.二叉树通常有______存储结构和______存储结构两类存储结构。
11.每个二叉链表的访问只能从______结点的指针,该指针具有标识二叉链表的作用。
(无向)树没有回路的连通图.
现在假定在图T的任何两个点顶点之间存在唯一简单 通路。则T是连通的,因为在它的任何两个顶点之间存在 通路。另外,T没有简单回路。为了看出这句话是真的, 假定T有包含顶点x和y的简单回路。则在x和y之间就有两 条简单通路,因为这条简单回路包含一条从x到y的简单通 路和一条从y到x的简单通路。因此,在任何两个顶点之间 存在唯一简单通路的图是树。
加一条边{vi, vj},因为G中原来存在vi到vj的通路,故此时 形成一条经过vi和vj的回路。
习题 证明:简单图是树,当且仅当它是连通的,但是删除它的 任何一条边就产生不连通的图。
6.2根树 定义 有向树:有向图,底图是有向树
根树:有一个顶点(称为根)的入度为0,其余顶点 的入度均为1
例
定理 根树中,从根到其余每个顶点有且仅有一条通路
证明:因为T是根树,则作为无向图而言,根结点到任何 结点均有通路,若无有向通路,则一定存在某个结点,其 入度为0,这与根树的定义矛盾。又若根节点到某结点有 两条有向通路,则作为无向图看待时,必存在回路,故T 不成树,矛盾。
解:设该树有n1片树叶,有m条边,n个顶点 根据树的性质 m n 1 (n1 2 3) 1 n1 4 由握手定理得
n1 2 4 3 3 2(n1 4)
第六章园林树木的选择与配置
规则式配置
3. 列植: 将乔灌木按一定的株行距排列种植的方式 通常为单行或双行,多用一种树木组成,也有用两种树种间植搭配,如一株桃 树、一株柳树的传统栽植方式,形成桃红柳绿的春景。在必要时亦可植多行。 列植多用于行道树、绿篱、林带及水边种植等。幻灯片 25
ห้องสมุดไป่ตู้
4. 正方形种植: 按方格网在交叉点种植树木,株行距相等。 优点是透光通风良好,便于抚育管理和机械操作。缺点是容易造成树冠密接。 一般在园林中应用不多。
但是天安门广场绿化的政治意义和艺术效果的重要性是第一位的油松的观赏特性比侧柏和圆柏的观赏特性更能满足这第一位的要求所以即使其适应性不如后二者但仍然被选种
第六章
园林树木的配置
第一节
观赏树木的配置方式
配植方式——指在环境绿化美化中搭配观赏树木的样式。观赏 树木的配植方式有规则式和自然式两大类 规则式——树木按一定的几何图形栽植,又称为整形式配置。 显得整齐、严谨、庄重、端正,以行列式或对称式为主,具有 一定的株行距,且按照固定的方式排列。有的需要进行整形修 剪,模拟立体几何图形、建筑形体或各种动物形态等。若处理 不当则显得单调呆板。 自然式——树木栽植不按一定的几何形状,又叫不整形配置。 自然、灵活、参差有致,没有一定的株行距和固定的排列方式。 似树木自然生长在原野上而形成的自然群落,形式不定,因地 制宜,力求自然,有居城市而享园林之乐的感觉。故环境设计 宜再现自然,顺乎自然。
①先面后点:就是先从整体考虑,大局下手,然后再考虑局部 穿插细节,作到“大处添景,小处添趣”。 ②先主后宾:在一个景区里,树木配置,要主宾分明,先定主 景树种,再选择配景树种。 ③远近结合:树木配置时,不但考虑一个景区内树木搭配,还 要与相邻空间或远处的树木和背景及其他景物能彼此相呼应, 才能取得园林空间艺术构图完整性。 ④高低结合:一般说在一个园林空间或一个树丛、树群内,乔 木是骨干。配置时要先乔木,后灌木再草花。要先定乔木的树 种、数量和分布位置,在由高到低分层处理灌木和草花,这样 才能有完美艺术形象的立体轮廓线。
第六章树 作业讲解
6-10 插入最右子结点
template<class T> int Tree<T> :: InsertChild(T value) { if(current = = NULL) return 0; if(current→firstChild == NULL) { current→firstChild=new TreeNode<T>(value,NULL,NULL); return 1 ;} else { TreeNode<T> *temp= current→firstChild; while(temp→nextBrother!=NULL) temp= temp→nextBrother; temp→nextBrother=new TreeNode<T>(value,NULL,NULL); return 1 ; }
6-13 后根遍历树——非递归算法
6-13 后根遍历树——递归算法
template<class T> void Tree<T> :: PostOrder() { if(! IsEmpty()) { TreeNode<T> *p = current ; // 保存当前结点 int k = FirstChild(); while(k)// 后根遍历当前结点的诸子树 { PostOrder(); k = NextBrother(); } current = p ; // 恢复当前指针 visit(); // 访问当前结点 } }
6-11 删除子结点
int k=1; while(temp→nextBrother!=NULL && k<i) { pred=temp; temp=temp→nextBrother; k++;} if(k = =i) { pred→nextBrother= temp→nextBrother; DelSubtree(temp); return 1;} else return 0; }
第六章树的习题
六、树和二叉树一、选择题:1、在具有n个结点的完全二叉树中,结点i(i>1)的父结点是(D )A.2i B.不存在C.2i+1 D.⌊ i/2⌋3、下列陈述中正确的(A )A.二叉树是度为2的有序树B.二叉树中结点只有一个孩子时无左右之分C.二叉树中必有度为2的结点D.二叉树中最多只有两棵子树,并且有左右之分4、以二叉链表作为二叉树的存储结构,在具有n个结点的二叉链表中(n>0),空链域的个数为( C )A.2n - 1 B.n - 1 C.n + 1 D.2n + 15、将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为(B )A.99 B.98 C.50 D.486、在一棵具有五层的满二叉树中,结点总数为( A )A.31 B.32 C.33 D.167、在一棵二叉树中,第5层上的结点数最多为(C )A.8 B.15 C.16 D.328、由二叉树的(B)遍历,可以惟一确定一棵二叉树A.前序和后序B.前序和中序C.后序D.中序9、具有35个结点的完全二叉树的深度为( B )。
A.5B.6C.7D.810、已知一棵二叉树的先序遍历序列为EFHIGJK,中序遍历序列为HFIEJGK,则该二叉树根的右子树的根是( C )。
A.E B. F C. G D. J11、由4个结点构造出的不同的二叉树个数共有( C )。
A.8 B. 10 C.12 D.1412、在完全二叉树中,如果一个结点是叶子结点,则它没有(D )。
A.左孩子结点B. 右孩子结点C.左、右孩子结点D.左、右孩子结点和兄弟结点13、深度为6的二叉树最多有( B )个结点。
A.64 B.63 C.32 D.3114、二叉树使用二叉链表存储,若p指针指向二叉树的一个结点,当p->lchild=NULL时,则( A )。
A.p结点左儿子为空B.p结点有右儿子C.p结点右儿子为空D.p结点有左儿子15、在具有n个结点的完全二叉树中,若结点i有左孩子,则结点i的左孩子编号为( A )。
云大《数据结构》课程教学课件-第6章 树和二叉树(147P)_OK
^d ^ ^ e ^ 三叉链表
3)二叉链表是二叉树最常用的存储结构。还有其它链接方 法,采用何种方法,主要取决于所要实施的各种运算频度。
例:若经常要在二叉树中寻找某结点的双亲时,可在每个结 点上再加一个指向其双亲的指针域parent,称为三叉链表。
lchild data parent rchild
2021/8/16
2021/8/16
9
6.2 二 叉 树
6.2.1 二叉树的概念
一、二叉树的定义: 二叉树(Binary Tree)是n(n>=0)个结点的有限集,它或者是 空集(n=0)或者由一个根结点和两棵互不相交的,分别称 为根的左子树和右子树的二叉树组成。 可以看出,二叉树的定义和树的定义一样,均为递归定 义。
A
集合3
集合1
BCD
EF
G
集合2
2021/8/16
3
2、树的表示方法 1)树形图法
A
BCD
EF
G
2)嵌套集合法
3)广义表形式 ( A(B, C(E,F), D(G) )
4)凹入表示法
2021/8/16
A B
D
CG
EF
A B C E DF G
4
3、 树结构的基本术语
1)结点的度(Degree):为该结点的子树的个数。 2)树的度:为该树中结点的最大度数。
7)路径(Path):若树中存在一个结点序列k1,k2,…,kj,使得ki是 ki+1的双亲(1<=i<j),则称该结点序列是从ki到kj一条路径 (Path)
路径长度:路径的长度为j-1,其为该路径所经过的边的数 目。
A
BCD
EF
G
第六章 树基础知识)
第六章树(基础知识)选择题部分1.在线索化二叉树中,t所指结点没有左子树的充要条件是()答案(A)t-〉left==NULL (B)t-〉ltag==1(C)t-〉ltag=1且t-〉left=NULL (D).以上都不对2.二叉树按某种顺序线索化后,任一结点均有指向其前趋和后继的线索,这种说法答案(A)正确(B)错误3.二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法()答案(A)正确(B)错误4.由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法答案(A)正确(B)错误5.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为()。
答案(A)2h (B)2h-1(C)2h+1(D)h+16.已知某二叉树的后序遍历序列是dabec。
中序遍历序列是debac,它的前序遍历序列是()。
答案(A)acbed (B)decab(C)deabc (D)cedba7.如果T2是由有序树T转换而来的二叉树,那么T中结点的前序就是T2中结点的()答案(A)前序(B)中序(C)后序D.层次序8.某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是()。
答案(A)bdgcefha (B)gdbecfha (C)bdgaechf (D)gdbehfca9.二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。
这种说法()答案(A)正确(B)错误10.按照二叉树的定义,具有3个结点的二叉树有()种。
答案(A)3(B)4(C)5(D)611.在一非空二叉树的中序遍历序列中,根结点的右边()答案(A)只有右子树上的所有结点(B)只有右子树上的部分结点(C)只有左子树上的部分结点(D)只有左子树上的所有结点12.树最适合用来表示()。
答案(A)有序数据元素(B)无序数据元素(C)元素之间具有分支层次关系的数据(D)元素之间无联系的数据13.任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序()答案(A)不发生改变(B)发生改变(C)不能确定D.以上都不对14.实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用()存储结构。
第六章 造林树种的选择
40- 80cm
>80cm
土壤 质地
坡型 坡位
上、 全
中、 下
上、 全
中、 下
上、 全
中、 下
平、凸
8.98 9.86 10.04 10.55 10.25 10.67 11.40 11.36 11.10 11.18 12.25 11.86
粘、沙
凹 9.25 10.08 10.40 10.76 10.61 10.88 11.76 11.57 11.46 11.39 12.61 12.07
规模化种植的经济林
三、树种选择的方法
1.按培育目标定向选择树种; 2.按适地适树的原则选择树种; 3.对比分析选择树种; 4.现有人工林的调查;
三、树种选择的方法
5.树种选择方案的统筹解决;
培育目标的综合性,长短效益的结合; 不同立地面积分布的不均匀性; 生态平衡的维持,树种的复杂性; 方法:多目标规划; 总目标:经济、生态效益。
儿、沙棘、柠条等); 注意选择优良灌木树种。
五、水土保持防护林树种选择
2、水土保持防护林的树种特征
(1)根系发达; (2)枝叶量大,枯落物多; (3)生长较快; (4)生物量高; (5)改良土壤能力强; (6)适应性强。
六、水土保持经济林树种选择
早实、丰产稳产、优质、适应性强。
七、适地适树
教训; 树种选择不当,不易很快显示出来,几年
或几十年后才显示,后果严重。
规模化种植的葡萄
二、造林树种选择的原则
造林树种的各项性状(经济与效益性状)必须 定向地符合既定的培育目标要求,即定向的原 则;
造林树种的生态习性必须与造林地的立地条件 相适应,即适地适树的原则;
第六章-树和二叉树
之
树 和 二 叉 树 13
1 2 3 A B C
4 5 6 7 0 D E F
8 0
9 10 0 G
¾ 二叉树顺序存储的算法描述
数 据 结 构
¾ 初始化二叉树
之
树 和 二 叉 树 14
#define Max_Size 100 typedef int TElemType; typedef TElemType SqBT[Max_Size+1]; void InitBT(SqBT bt){//设置空树 int i; for(i=1;i<=Max_Size;i++) bt[i]=0; }
数 据 结 构
之
树 和 二 叉 树 19
¾ 后序遍历顺序二叉树算法 void PostBT(SqBT bt,int i){ if(i>Max_Size||!bt[i]) return; PostBT(bt,2*i); PostBT(bt,2*i+1); printf("%3d ",bt[i]); }
数 据 结 构
之
树 和 二 叉 树 4
5. 孩子结点、双亲结点、兄弟结点、堂兄弟 结点、祖先结点、子孙结点…… 6. 结点的层次从根开始,根为第一层,根的 孩子为第二层;若某结点在第L层,则其 子树的根就在第L+1层。 7. 树的深度或高度:树中结点的最大层次。 8. 有序树:如果将树中结点的各子树看成是 从左至右有次序的;反之,则是无序树。 9. 森林:是m棵互不相交的树的集合。
数 据 结 构
之
树 和 二 叉 树 25
¾ 打印一维数组 void printSq(SqBT bt){ int i; printf("\nSeqArray:"); for(i=1;i<=Max_Size;i++) printf("%3d ",bt[i]); }
图论 第6章 树和割集
1.3 极小连通图
定义2 若连通图G中去掉任一条边后得到一个不连通图,则称G 为极小连通图。 推论4 图G是树当且仅当G是极小连通图。
1.4 树的中心
定义3 设G=(V,E)是连通图,v∈V,数 e(v)=max{d(v,u)} 称为v在G中的偏心率。 数 r(G)=min{e(v)} 称为G的半径。 满足r(G)=e(v)的顶点v称为G的中心点。G的所有中心点组成 的集合称为G的中心,G的中心记为C(G)。 定理2 每棵树的中心或含有一个顶点,或含有两个邻接的顶点。
(2)∑deg v=2q
(3)根据具体的题设条件进行特殊的不等式的放缩[解题关键] 例3 设G是一棵树且Δ(G)≥k,证明:G中至少有k个1度顶点。
1.7 生成树(包含所有顶点的树)
定义1 设G=(V,E)是一个图,若G的一个生成子图 T=(V,F)是树,则称T是G的生成树。 定义2 设G=(V,E)是一个图,若G的一个生成子图 T=(V,F)是一个森林,则称T是G的生成森林。
1.8 生成树存在问题
定理1 图G有生成树的充分必要条件是G为一个连通图。
3极小连通图定义2若连通图g中去掉任一条边后得到一个不连通图则称g为极小连通图
第六章
树和割集
内容
树及其性质、生成树、割集
第一节
1.1 树和森林向树,简称树, 记为T。 定义2 无圈的无向图称为无向森林,简称森林。
1.2 树的特征性质
定理1 设G=(V,E)是一个(p,q)图,则下列命题等价: (1) G是树; (2) G的任两个不同顶点间有唯一的一条路联结; (3) G连通且 p=q+1; (4) G无圈且 p=q+1; (5) G无圈且任加一条边得到有唯一圈; (6) G连通且任去掉一条边得不连通图。
数据结构第六章树和二叉树习题及答案
习题六树和二叉树一、单项选择题1.以下说法错误的是 ( )A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构E.任何只含一个结点的集合是一棵树2.下列说法中正确的是 ( )A.任何一棵二叉树中至少有一个结点的度为2B.任何一棵二叉树中每个结点的度都为2C.任何一棵二叉树中的度肯定等于2D.任何一棵二叉树中的度可以小于23.讨论树、森林和二叉树的关系,目的是为了()A.借助二叉树上的运算方法去实现对树的一些运算B.将树、森林按二叉树的存储方式进行存储C.将树、森林转换成二叉树D.体现一种技巧,没有什么实际意义4.树最适合用来表示 ( )A.有序数据元素 B.无序数据元素C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C.15 D.不确定6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。
与森林F 对应的二叉树根结点的右子树上的结点个数是()。
A.M1 B.M1+M2 C.M3 D.M2+M37.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A. 250 B. 500 C.254 D.505 E.以上答案都不对8. 设给定权值总数有n 个,其哈夫曼树的结点总数为( )A.不确定 B.2n C.2n+1 D.2n-19.二叉树的第I层上最多含有结点数为()A.2I B. 2I-1-1 C. 2I-1 D.2I -110.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点A.2h B.2h-1 C.2h+1 D.h+111. 利用二叉链表存储树,则根结点的右指针是()。
A.指向最左孩子 B.指向最右孩子 C.空 D.非空12.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。
第六章 树状结构
6.24
2006
线索二叉树的优点
搜寻线索二叉树节点的中序后继的C语言程序。 搜寻线索二叉树节点的中序后继的C语言程序。
Node_type *insuc(Node_type *ptr) { Node_type *this_n; *this_n; this_n = ptr->rlink; ptr->rlink; if(ptrif(ptr->rbit == 1) while(this_nwhile(this_n->lbit == 1) this_n=this_n->llink; this_n=this_n->llink; return this_n; this_n; }
6.18
2006
中序遍历的非递归的程序段
void inorder(struct node *T) { int i = -1; for(; for(; ;) { while(T != NULL) { i = i +1; if(i > n) printf("The stack is full"); ull"); else { STACK[i] = T; t= t->llink; >llink;
终端节点( 终端节点 ( terminal node) 或叶节点 ( leaf node): node)或叶节点( node)
- 没有子节点的节点称为终端节点. 没有子节点的节点称为终端节点. - 图6-1中,J、K、L、G、M、N、I皆为叶节点。 皆为叶节点。
6.5
2006
树状结构的一些专有名词4 树状结构的一些专有名词4
- 树中某节点的高度表示此节点至叶节点的最长路径(Path) 树中某节点的高度表示此节点至叶节点的最长路径(Path) 长度。 长度。 - 如图6-1的A节点高度为3,C节点的高度为1。 如图6 节点高度为3 节点的高度为1
哈工大集合论习题课-第六章 树及割集 习题课(学生)
第六章 树及割集习题课1课堂例题例1 设T 是一棵树,T 有3个度为3顶点,1个2度顶点,其余均是1度顶点。
则(1)求T 有几个1度顶点?(2)画出满足上述要求的不同构的两棵树。
分析:对于任一棵树T ,其顶点数p 和边数q 的关系是:1q p =-且1deg()2ipi v q ==∑,根据这些性质容易求解。
解:(1)设该树T 的顶点数为p ,边数为q ,并设树T 中有x 个1度顶点。
于是1deg()33122ipi v x q ==⨯+⨯+=∑且31p x =++,1q p =-,得5x =。
(2)满足上述要求的两棵不同构的无向树,如图1所示。
图1例2设G 是一棵树且()G k ∆≥,证明G 中至少有k 个度为1顶点。
证:设T 中有p 个顶点,s 个树叶,则T 中其余p s -个顶点的度数均大于等于2,且至少有一个顶点的度大于等于k 。
由握手定理可得:1222()2(1)pi i q p deg v p s k s ==-=≥--++∑,有s k ≥。
所以T 中至少有k 个树叶 。
习题例1 若无向图G 中有p 个顶点,1p -条边,则G 为树。
这个命题正确吗?为什么?解:不正确。
3K 与平凡图构成的非连通图中有四个顶点三条边,显然它不是树。
例2设树T 中有2n 个度为1的顶点,有3n 个度为2的顶点,有n 个度为3的顶点,则这棵树有多少个顶点和多少条边?解:设T 有p 个顶点,q 条边,则123161q p n n n n =-=++-=-。
由deg()2v Vv q ∈=∑有:1223322(61)122n n n q n n ⨯+⨯+⨯==-=-,解得:n =2。
故11,12q p ==。
例3证明恰有两个顶点度数为1的树必为一条通路。
证:设T 是一棵具有两个顶点度数为1的(,)p q 树,则1q p =-且1deg()2pii v q ==∑2(1)p =-。
又T 除两个顶点度数为1外,其他顶点度均大于等于2,故211deg()2deg()2(1)p p iii i v v p -===+=-∑∑,即21deg()2(2)p ii v p -==-∑。
安全系统工程-第六章 事件树分析
一、事件树分析方法及分析目的二、事件树分析程序三、事件树建造示例(1)分析方法事件树分析ETA(Event Tree Analysis)是系统安全工程中的重要分析方法之一重要分析方法之一,,其理论基础是运筹学中的决策论是运筹学中的决策论。
是一种归纳分析方法,从一个初始事件开始始事件开始,,按顺序分析事件向前发展中各个环节成功与失败的过程和结果过程和结果。
每个系统都是由若干个元件组成的每个系统都是由若干个元件组成的,,每一个元件对规定的功能都存在具有和不具有两种可能对规定的功能都存在具有和不具有两种可能。
元件具有其规定的功能件具有其规定的功能,,表明正常(成功);不具有规定功能规定功能,,表明失效(失败)。
按照系统的构成顺序,从初始元件开始从初始元件开始,,由左向右分析各元件成功与失败两种可能与失败两种可能,,直到最后一个元件为止直到最后一个元件为止。
分析的过程用图形表示出来的过程用图形表示出来,,就得到近似水平的树形图——事件树事件树。
事件树分析可以直观地展现事故发生发展的过程,如在事件(隐患)发展的不同阶段采取恰当措施阻断其向前发展施阻断其向前发展,,就可达到预防事故的目的就可达到预防事故的目的。
(2)分析原理(3)分析目的①能够判断出事故发生与否能够判断出事故发生与否,,以便采取直观的安全方式采取直观的安全方式;;②能够指出消除事故的根本措施能够指出消除事故的根本措施,,改进系统的安全状况改进系统的安全状况;;③从宏观角度分析系统可能发生的事故事故,,掌握事故发生的规律掌握事故发生的规律;;④可以找出最严重的事故后果可以找出最严重的事故后果,,为确定顶上事件提供依据确定顶上事件提供依据。
⑤可以对已经发生的事故进行原因分析分析。
(1)明确分析对象及其范围明确分析对象及其范围,,确定初始事件•初始事件的确定是事件树分析的重要一环初始事件的确定是事件树分析的重要一环,,初始事件应当是系统故障始事件应当是系统故障、、设备故障设备故障、、人为失误或是工艺异常或是工艺异常,,主要取决于安全系统或操作人员对初始事件的反应员对初始事件的反应。
数据结构第6章树习题
第六章树习题1单项选择题1、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则叶子结点个数是(B)。
A、9B、11C、15D、无法确定2、设给定权值总数有n个,其哈夫曼树的结点总数为( D )。
A、不确定B、2nC、2n+1D、2n–13、有关二叉树下列说法正确的是(B)。
A、二叉树的度为2B、一棵二叉树的度可以小于2C、二叉树中至少有一个结点的度为2D、二叉树中任何一个结点的度都为24、一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点。
A、2hB、2h-1C、2h+1D、h+15、对于有n个结点的二叉树, 其高度为()。
log D、不确定A、n log2nB、log2nC、⎣⎦n26、利用二叉链表存储树,则根结点的右指针是()。
A、指向最左孩子B、指向最右孩子C、空D、非空7、树的后根遍历序列等同于该树对应的二叉树的( )。
A、先序遍历B、中序遍历C、后序遍历D、层序遍历8、在下列存储形式中,哪一个不是树的存储形式?()A、双亲表示法B、孩子链表表示法C、孩子兄弟表示法D、顺序存储表示法9、已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。
A、CBEFDAB、FEDCBAC、CBEDFAD、不定10、某二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。
A、空的或只有一个结点B、任一结点无左子树C、高度等于其结点数D、任一结点无右子树11、一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是:( )。
A、不确定B、0C、1D、212、若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为( )。
A、X的双亲B、X的右子树中最左的结点C、X的左子树中最右结点D、X的左子树中最右叶结点13、引入二叉线索树的目的是().A、加快查找结点的前驱或后继的速度B、为了能在二叉树中方便的进行插入和删除C、为了能方便的找到双亲D、使二叉树的遍历结果唯一14、下述编码中哪一个不是前缀码()。
数据结构 第六章-树
20
A B C D
E
F
G H
I J
A
E F H
G
B C
D A
I J
A
B C F
E H
G
B C D F
E G H I J
21
I
D
J
5. 二叉树转换成树和森林
二叉树转换成树 1. 加线:若p结点是双亲结点的左孩子,则将p的右孩 子,右孩子的右孩子,……沿分支找到的所有右孩 子,都与p的双亲用线连起来 2. 抹线:抹掉原二叉树中双亲与右孩子之间的连线 3. 调整:将结点按层次排列,形成树结构7Fra bibliotek6.3.2
树和森林的存储结构
树的存储结构有很多,既可以采用顺序存储结构, 也可以采用链式存储结构。但无论采用哪种存储方式, 都要求存储结构不仅能存储各结点本身的数据信息,还 要能惟一地反映树中各结点之间的逻辑关系。 双亲表示法 孩子链表表示法 孩子兄弟表示法
8
1.双亲表示法 除根外,树中的每个结点都有惟一的一个双亲结点,所以可以用一 组连续的存储空间存储树中的各结点。一个元素表示树中一个结点, 包含树结点本身的信息及结点的双亲结点的位臵。 A B E F C G H D I
}CTBox;
//树结构 typedef struct {CTBox nodes[MAX_TREE_SIZE]; int n, r; }Ctree
12
3. 孩子-兄弟表示法(树的二叉链表)
孩子兄弟表示法用二叉链表作为树的存储结构。将树中的多支关系用 二叉链表的双支关系体现。 ※ 结点的左指针指向它的第一个孩子结点
//孩子结点结构 typedef struct CTNode
1 2 3 4 5 6
第6章-1( 树的基本概念)
10.层数 根结点的层数为1,其它结点的层数为从根结点到该 结点所经过的分支数目再加1。 11. 树的高度(深度) 树中结点所处的最大层数称为树的高度,如空树的 高度为0,只有一个根结点的树高度为1。 12.树的度 树中结点度的最大值称为树的度。
13. 有序树
若一棵树中所有子树从左到右的排序是有顺序的,不 能颠倒次序。称该树为有序树。 14. 无序树
性质3 对任意一棵二叉树,如果叶子结点个数为n0, 度为2的结点个数为n2,则有n0=n2+1。 证明:设二叉树中度为1的结点个数为n1,根据二叉树 的定义可知,该二叉树的结点数n=n0+n1+n2。又因为 在二叉树中,度为0的结点没有孩子,度为1的结点有1 个孩子,度为2的结点有2个结孩子,故该二叉树的孩 子结点数为 n0*0+n1*1+n2*2 ,而一棵二叉树中,除根 结点外所有都为孩子 结点,故该二叉树的结点数应为 孩子结点数加1即:n=n0*0+n1*1+n2*2+1因此,有 n=n0+n1+n2=n0*0+n2*1+n2*2+1,最后得到n0=n2+1。 先定义两种特殊的二叉树:
初始化树T。 (2) root(T) 求树T的根结点。
(3) parent(T,x)
求树T中,值为x的结点的双亲。 (4) child(T,x,i)
求树T中,值为x的结点的第i个孩子。
(5) addchild(y,i,x) 把值为x的结点作为值为y的结点的第i个孩子插入到树 中。 (6) delchild(x,i)
图 6-1 树的示意图
2. 凹入法表示法
具体参见图6-3 。
A B E J K L F C G D H M I 图 6-3 图 6-1(c)的树的凹入法表示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
空树
只含一个根结 点的二叉树
以空白字符“
A 以字符串“A 以下列字符串表示 D
”表示
”表示
A B
A(B(
,C(
,
)),D(
,
))
C
6.3 二叉树的存储结构
B
A C
void createbintree(BINTREE *t) /* 按先序遍历创建二叉链表*/ D { int a; scanf(″%d ″,&a); /* 如果读入0,创建空树*/ i f(a==0) *t=NULL; else { *t=(BTNODE *)malloc(sizeof(BTNODE)); (*t)->data=a; /* 将结点数据a放入根结点的数据域*/ createbintree(&(*t)->lchi ld); /* 建左子树*/ createbintree(&(*t)->rchi ld); /* 建右子树*/ } }
6.1 树的基本概念 例如:
B
A
C F
K L
D H I J
M
E
G
T1
T2
T3
6.1 树的基本概念
【特性】 1. 空树是树的特例; 2. 非空树中至少有一个结点,称为树的根,只有 根结点的树称为最小树; 3. 在含有多个结点的树中,除根结点外,其余结 点构成若干棵子树,且各子树间互不相交。
6.1 树的基本概念
6.2 二叉树
根结点
A
B C E F G H 左子树 K
D
右子树
根结点
右子树
A
B
C
E
F
D
左子树 显然,二叉树的定义是递归的。
G
H K
6.2 二叉树 【二叉树的五种基本形态】:
空树 只含根结点 N 右子树为空树 N L 左子树为空树 左右子树均 不为空树
N
R L
N
R
6.2
二叉树
思考:二叉树与度为2的有序树相同吗?? 不同!!在有序树中,虽然一个结点的孩子之间是有左右
E
E F G
D
F
G
6.1 树的基本概念
线性结构 树型结构
第1个数据元素 无直接前驱
最后1个数据元素 无直接后继 其它数据元素 一个直接前驱、 一个直接后继
根结点 无双亲 多个叶子结点 无子结点
其它数据元素 一个双亲、 1个或多个孩子
6.2 二叉树
6.2.1二叉树的定义
二叉树是n (n≥0) 个结点的有限集合,这个集 合或是空集,或是由一个根结点以及两棵互不相交的、 被称为根的左子树和右子树所组成;左子树和右子树 分别又是一棵二叉树。 【特点】: 每个结点至多只有两棵子树, 且二叉树的子树有左右之分,其次 序不能任意颠倒。
6.1.1 树的定义
• 当n=0时称为空树; H E
D I L J M
树是n(n≥0)个结点的有限集。
• 当n>0时为非空树,在任意一棵非空树中,有且仅 有一个称为根的结点,其余的结点可分为m(m ≥0) 个互不相交的有限集T1,T2,…,Tm,其中每一个集合 又称为一棵树,并且称为根的子树;
• 同理,每一棵子树又可以分为若干个互不相交的 有限集……
6.1 树的基本概念
森林:是m(m ≥0)棵互不相交的树的集合。对树 中每个结点而言,其子树的集合即为森林。
任何一棵非空树是一个二元组
Tree = (root,F)
其中:root 被称为根结点 F F 被称为子树森林 B
E F
root
A
C
G H
D
I J
K
L
M
6.1 树的基本概念
6.1.3 树的表示方法
6.1 树的基本概念
1. 双亲表示法 数组下标
data parent
A B C D E F G -1 0 0 0 2 2 5
A
B
E
C F G
D
0 1 2 3 4 5 6
※ 很容易由孩子找到双亲,但不易从双亲找到孩子。
6.1 树的基本概念
2. 多重链表表示法 每个结点可能含有 m个孩子,即每个结点发 出m 个链,分别指向它的一个孩子。 结点
5 10 11 12
10 11 12
6
7
6.3.1 二叉树的顺序存储结构
对于一般二叉树,则应将其每个结点与完全二叉树 上的结点相对照,存储在一维数组的相应分量中。 【一般 二叉树 2 的顺序 存储】 C 4
● 8 0 1 2
A 1
B 5 D F 6 ● ● 12 8 9
●
3 7 ●
● E 9 10 3 4 5
的度 结点元 素的值
指向孩子 的指针域
【补充--孩子链表表示法】:
另一种办法是: • 把每个结点的孩子结点排列起来,看成是一个 线性表,且以单链表作存储结构,则n个结点有n 个孩子链表(叶子的孩子链表为空表)。 • 而n个头指针又组成一个线性表,为了便于查 找,可采用顺序存储结构。
data firstchild
6.1.2 树的基本术语
D
J M
树的结点:包含一个数据元素 H I 及若干个指向其子树的分支; 结点的度:一个结点拥有的子树数目;
(有几个直接后继就是几度,亦称“次数”)
树的度:一棵树上所有结点度的最大值; 叶子结点(终端结点):度为零的结点; 分支结点(非终端结点) :度大于零的结点; (从根到结点的)路径:由从根到该结点所经分支和 结点构成;
结点结构:
lchild data rchild
二叉树的每个结点包括三个成员。其中,lchild是指向该结点左孩子的 指针,rchild是指向该结点右孩子的指针,data存放结点本身的值。
6.3 二叉树的存储结构
6.3.3 建立二叉树
以字符串的形式 根-左子树-右子树 定义一棵二 叉树
6.3 二叉树的存储结构
进行 1 至 n 的编号,则对完全二叉树中任意一个编号为
i 的结点:
8 9 10 11 12
(1) 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 i/2 的结点为其双亲结点; (2) 若 2i>n,则该结点无左孩子,
否则,编号为 2i 的结点为其左孩子结点;
(3) 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。
2i+2
2i+3
6.3 二叉树的存储结构
• 二叉树的顺序存储表示
•
二叉树的链式存储表示
6.3 二叉树的存储结构
6.3.1 二叉树的顺序存储结构
对于完全二叉树,用一组地址连续的存储单元依 次自上而下、自左至右存储完全二叉树上的结点元素。 1 【完全二叉树的顺序存储】 2 3 4 8 9
1 2 3 4 5 6 7 8 9
试采用顺序存储方法画出所示二叉树的存储结构
1
2 4 6 5 7 3
【二叉树的顺序存储】
1 2 3 4 5
6
7
试采用二叉链表方法画出所示二叉树的存储结构
root
A B C D B E A
D
C E
6.3 二叉树的存储结构
C 语言的类型描述如下: typedef struct btnode { // 结点结构 int data; struct btnode *lchild, *rchild; // 左右孩子指针 } BTNode, *BiNTree;
B
E F
C
G H
D
I J
K
L
M
6.1 树的基本概念
结点的层次:从根结点到该结点所经过的路径长度 加1; 树的深度:树中叶子结点具有的最大层次数; 有序树:如果将树中结点的各子树看成从左至右是 有次序的(即不能互换),则称该树为有序树;
第一个孩子:在有序树中,最左边的子树的根称为 第一个孩子; A
最后一个孩子:最右边 的子树的根称为最后 一个孩子; E B F K L C G H D I J M
树形结构 是一类非线性结 构。这种结构结点之 间有分支,并具有层 次关系。它非常类似 于自然界中的树。
客观世界中:例如家谱、行政组织机构 计算机领域中:例如在编译程序中,用树来表示源程序 的语法结构;在数据库系统中,可用树来组织信息;在分 析算法的行为时,可用树来描述其执行过程。
6.1 树的基本概念
6.2
二叉树
2 4 8 9 5 10 11
1 3
性质5 :
6
12
7
(4) 如果结点i的序号为奇数且不等于1,则它 的左兄弟为i-1。 (5) 如果结点i的序号为偶数且不等于n,则它 的右兄弟为i+1。 (6) 结点i所在层数为 log2i +1。
6.2 二叉树
i/2
i
i+1
2i
2i+1
(k≥1)。
6.2 二叉树
• 性质 3 :
对任何一棵二叉树,若它含有n0 个叶子结点、 n2 个度为 2 的结点,则必存在关系式:n0 = n2+1。 【证明】: 设 n1为度为1的结点数,则总结点数 n = n0 + n1 + n2,又: 二叉树上分支总数 b = 0* n0 +1*n1+2*n2=n1 + 2n2
6.1 树的基本概念
孩子结点:结点的子树的根称为该结点的孩子结点; 双亲结点:相应地,该结点称为孩子的双亲结点; 兄弟:具有同一父结点的子结点互称兄弟; 堂兄弟:其双亲在同一层的结点互为堂兄弟; 祖先结点:从根到该结点所经分支上的所有结点; 子孙结点:以某结点为根的子树中任一结点都称为 A 该结叉树】