第四章 树与树的表示(五)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
来自百度文库
当x1和x2不属于同一 子集时,才需要合并
if( Root1 != Root2 )S[Root2].Parent = Root1;
}
下标 0 1 2 3 4 5 6 7 8 9
data 1 2 3 4 5 6 7 8 9 10
Parent -1 0 0 0 2 -1 0 2 5 5
改成-7。表示集 合有7个元素
int i;
for ( i=0; i < MaxSize && S[i].Data != X; i++) ; if( i >= MaxSize ) return -1; /* 未找到X,返回-1 */
for( ; S[i].Parent >= 0; i = S[i].Parent ) ;
return i; /* 找到X所属集合,返回树根结点在数组S中的下标 */ }
② 编号为i的结点的双亲结点(若存在)的编号是多少?
③ 编号为i的结点的第j个孩子结点(若存在)的编号是多少? ④ 编号为i的结点的有右兄弟的条件是什么? 其右兄弟的编号是多少?
4.在最大堆 {97,76,65,50,49,13,27}中插入83后,该最大堆为:.. A.{97,76,65,83,49,13,27,50} B.{97,83,65,76,49,13,27,50} C.{97,83,65,76,50,13,27,49} D.{97,83,65,76,49,50,13,27}
1
9
采用数组存储形式 下标 0 1 2 3 4 5 6 7 8 9 Data 1 2 3 4 5 6 7 8 9 10 Parent -1 0 -1 0 2 -1 0 2 5 5 数组中每个元素的类型描述为: typedef struct { ElementType Data; int Parent; } SetType;
4.6.3 集合及运算
1.集合的表示
集合运算:交、并、补、差,判定一个元素是否属于某一集合 并查集:集合并、查某元素属于什么集合 并查集问题中集合存储如何实现? 可以用树结构表示集合,树的每个结点代表一个集合元素 例如,有三个整数集合 S1={1,2,4,7} S2={3,5,8} S3={6,9,10} 集合名 指针 S1 S2 S3 2 4 6 7 3 5 10 8 双亲表示法: 孩子指向双亲。
1 2 4 7 5 3 8 9
6 10
改成-3。表示集 合有3个元素 为了改善合并以后的查找 性能,可以采用小的集合 合并到相对大的集合中。 (修改Union函数)
作业:
1.课本154页题目4.6. 2.课本154页题目4.7. 3. 一棵深度为h的满k叉树有如下性质: 第h层上的结点都是叶子结点,其余 各层上每个结点都有k棵非空子树。 如果按层次顺序(同层自左至右)从1开始 对全部结点编号,问: ① 各层的结点数是多少?
(2) 集合的并运算 分别找到X1和X2两个元素所在集合树的根结点 如果它们不同根,则将其中一个根结点的父结点指针设置成 另一个根结点的数组下标。
void Union( SetType S[ ], ElementType X1, ElementType X2 ) { int Root1, Root2; Root1 = Find(S, X1); Root2 = Find(S, X2);
1 7 5 3 6 10
2
4
8
9
负数表示根结点; 非负数表示双亲结 点的下标。
2.集合运算
(1)查找某个元素所在的集合(用根结点表示) int Find( SetType S[ ], ElementType X ) { /* 在数组S中查找值为X的元素所属的集合 */ /* MaxSize是全局变量,为数组S的最大长度 */
相关文档
最新文档