树实现集合与运算

浅浅的花香味﹌ 2022-05-13 01:24 242阅读 0赞

70

如图,2棵树表示2个集合,用一个数组存储多棵树

注意:(1).用树表示集合,树的每一个节点代表集合中的一个元素,并且从上到下,从左到右放从小到大的元素

(2)如何表示这2棵树?用数组存储每一个元素的data和该元素parent的位置,无parent则用-1表示

70 1

集合元素的查找:

  1. int find(Set s[ ],int x){
  2. int i;
  3. for(i=0;i<s.size&&s[i].data!=x;i++);
  4. if(i>=s.size) return -1;//查找元素的位置
  5. for(;s[i].parent>=0;i=s[i].parent);//查找根元素的位置
  6. }

注意:(1).s是数组,里面是多个树放在里面的

集合的合并:

70 2

  1. void union(Set s,int x1,int x2){
  2. //因为一个数组s,可以存放多棵树,所以只传入s和要查找的值即可
  3. int root1,root2;
  4. root1=find(s,x1);//大树的根
  5. root2=find(s,x2);//小树的根
  6. if(root1!=root2) s[root2].parent=root1;
  7. }

注意:(1).首先要分别指导要合并的2个元素的根节点,如果根节点相同,则证明是同一课树

(2).如果根节点不同,则把小树的根节点的parent指向大叔的根节点

(3).那如何确定每一颗树的元素个数呢?我们需要让根节点记录树的元素个数,其他节点没必要记录,这样可以节省内存空间,因为根节点的parent是不存在的,我们之前用-1表示,现在可以用-(树中的元素个数)表示,比如有7个元素,根节点的parent就为-7

发表评论

表情:
评论列表 (有 0 条评论,242人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL笔记-子查询集合运算

    一、子查询 子查询指在一个查询中嵌套另一个查询,可以多层嵌套。 常出现在两个位置: 1)、from子句后:此用法也被称为行内视图,因为该子查询的实质就是一个临时

    相关 实现集合运算

    ![70][] 如图,2棵树表示2个集合,用一个数组存储多棵树 注意:(1).用树表示集合,树的每一个节点代表集合中的一个元素,并且从上到下,从左到右放从小到大的元素 (

    相关 Java 集合运算

    问题描述 给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。 输入格式 第一行为一个整数n,表示集合A中的元素个数。   第二行有n个互不相同的

    相关 set和集合运算

    set集合 概念:set是可变的、无序的、不重复的元素集合。set的元素及元素里面的元素不能出现不可哈希类型。(即set的元素要求必须可以hash)