数据机构第6章资料.ppt

  1. 1、本文档共136页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
孩子、双亲、兄弟、堂兄弟:结点的子树的根称为该结点的孩子。相应地,该结点称为孩子的双亲。同一双亲的孩子之间互称兄弟。其双亲在同一层的结点互为堂兄弟。 B、C、D是A的孩子。  A 是B、C 、D的双亲。  结点H、I、 J互为兄弟结点。 作业: 6.2 6.3 6.5 6.6 6.8 作业 6.33 6.42 中序遍历线索二叉树 //0:有孩子;1:无孩子 Void InOrderTraverse_Thr(BiThrTree T)//T:头结点 { p = T-lchild; while(p != T){ while(p-LTag == 0) p=p-lchild; coutp-data“”; while((p-RTag==1)(p-rchild!=T)) { p = p-rchild; coutp-data“”; } p = p-rchild; } } 建立线索化链表(以中序为例) 按某种次序将二叉链表线索化,实质是在遍历过程中用线索取代空指针。 对线索树进行遍历,显然其效率要比传统方式高些。如果程序中经常要进行二叉树的遍历或者需要查找在遍历过程中的前驱和后继,应当采用线索链表表示。 作业: 6.15 4. 几个问题 ①给定树的先根遍历序列和后根遍历序列可唯一画出一棵树。 ②给定森林的先序遍历序列和中序遍历序列可唯一确定一森林。 ③关于二叉树的先序、中序和后序遍历序列确定二叉树的问题。 作业: 6.14 6.19 6.20 6.23 6.24 6.28 离散数学中的定义 等价关系:若集合S中的关系R是自反的、对称的和传递的,则称为等价关系。 等价类:R是集合S的等价关系,由[x]R={y|y∈S∧xRy}给出的集合[x]R称为由x∈S生成的一个R等价类。 划分:R是S上的等价关系,可以按R将S划分为若干不相交的子集S1 ,S2,……,它们的并即为S,则这些子集Si就是S的R等价类。 假设集合S有n个元素,m个形如(x,y)的等价偶对确定了等价关系R,求S的划分。 划分等价类需要的操作 1) 构造只含单个元素的集合 2) 判定某个元素所属集合 3) 合并两个互不相交的集合 MFSet类型的实现 根据Find和Merge两个操作的特点,用树来实现MFSet。 以森林F=(T1,T2,…,Tn)表示MFSet类型的集合S,每颗树Ti表示一个子集Si。 树中每个结点表示子集中的一个成员x。 令每个结点中包含一个指向其双亲的指针。 约定根结点兼作子集的名称。 int find_mfset(MFSet S, int i) { if (i1 || iS.n) return -1; for (j=i;S.nodes[j].parent0;j=S.node[j].parent) ; return j; } Status merge_mfset(MFSet S,int i,int j) { if (i1 || iS.n || j1 || jS.n) return ERROR; S.node[i].parent=j; return OK; } 时间复杂度分别为O(d)和O(1),d为树的深度 极端情况: 改进方法? Merge时,总是将成员少的子集根结点指向含成员多的子集的根 修改存储结构,令根结点的parent域存储子集中所含成员数目的负值 可以将find_mfset的复杂度降到O(logn) Status mix_mfset(MFSet S, int i, int j) { if (i1 || iS.n || j1 || jS.n) return ERROR; if (S.nodes[i].parentS.nodes[j].parent) { S.nodes[j].parent += S.nodes[i].parent; S.nodes[i].parent = j; }else{ S.nodes[i].parent += S.nodes[j].parent; S.nodes[j].parent = i; } return OK; } 进一步的改进:Find时压缩路径 当所查元素不在第二层时,将所有从根到该元素路径上的元素都变成根结点的孩子 int fix_mfset(MFSet S, int i) { if (i1 || iS.

文档评论(0)

四娘 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档