前面讲解了存储普通树的双亲表示法和孩子表示法,本节来讲解最后一种常用方法——孩子兄弟表示法。

图 1 普通树示意图

树结构中,位于同一层的节点之间互为兄弟节点。例如,图 1 的普通树中,节点 A、B 和 C 互为兄弟节点,而节点  D、E 和 F 也互为兄弟节点。

孩子兄弟表示法,采用的是链式存储结构,其存储树的实现思想是:从树的根节点开始,依次用链表存储各个节点的孩子节点和兄弟节点。

因此,该链表中的节点应包含以下 3 部分内容(如图 2 所示):

节点的值;

指向孩子节点的指针;

指向兄弟节点的指针;

图 2 节点结构示意图

用 C 语言代码表示节点结构为:

#define ElemType char typedef struct CSNode{ ElemType data; struct CSNode * firstchild,*nextsibling; }CSNode,*CSTree;

以图 1 为例,使用孩子兄弟表示法进行存储的结果如图 3 所示:

图 3 孩子兄弟表示法示意图

由图 3 可以看到,节点 R 无兄弟节点,其孩子节点是 A;节点 A 的兄弟节点分别是 B 和 C,其孩子节点为 D,依次类推。

实现图 3 中的 C 语言实现代码也很简单,根据图中链表的结构即可轻松完成链表的创建和使用,因此不再给出具体代码。

接下来观察图 1 和图 3。图 1 为原普通树,图 3 是由图 1 经过孩子兄弟表示法转化而来的一棵树,确切地说,图 3 是一棵二叉树。因此可以得出这样一个结论,即通过孩子兄弟表示法,任意一棵普通树都可以相应转化为一棵二叉树,换句话说,任意一棵普通树都有唯一的一棵二叉树于其对应。

因此,孩子兄弟表示法可以作为将普通树转化为二叉树的最有效方法,通常又被称为"二叉树表示法"或"二叉链表表示法"。

c语言孩子兄弟法存储一棵树,树的孩子兄弟表示法相关推荐

  1. 使用双亲指针表示法存储一棵树,可以方便解决下列哪个应用问题( )

    使用双亲指针表示法存储一棵树,可以方便解决下列哪个应用问题( C ) A. 最短路径 B. 树的遍历 C. 等价类 D. 优先级队列 等价类问题通过并查集算法实现. 等价类采用存储结构为双亲节点表示法 ...

  2. c语言孩子兄弟法存储一棵树,数据结构(C语言版)---树

    1.树:n个结点的有限集,n=0时为空树. 1)特点: (1)有且仅有一个特定的称为根的结点. (2)有若干个互不相交的子树,这些子树本身也是一棵树. (3)树的根结点没有前驱结点,除根结点外的所有结 ...

  3. 如何用孩子兄弟表示法存储树c语言,C语言,数据结构,树的孩子兄弟表示法,程序一切正常,但是有个问题不太懂了,园豆不多,帮帮忙,求助一下....

    我的困惑就是在creatTree函数中,参数是(LTNode &T),也就是说是struct node**型指针,但是在递归中,也就是在creatTree(T->firstchild)中 ...

  4. 编程求以孩子兄弟表示法存储的森林的叶子结点数☆

    题目:编程求以孩子兄弟表示法存储的森林的叶子结点数 分析:我们可以试想一个节点它如果有左孩子,那么根据孩子兄弟表示法的规则,那它一定不是叶节点,相反如果没有左孩子,那么             它一定 ...

  5. 假设某专业有若干个班,每个班有若干学生,每个学生包含姓名和分数,这样构成一棵树,如图1所示。假设树中每个结点的name域均不相同,该树采用孩子兄弟链存储结构,其结点类型定义如下:

    假设某专业有若干个班,每个班有若干学生,每个学生包含姓名和分数,这样构成一棵树,如图1所示.假设树中每个结点的name域均不相同,该树采用孩子兄弟链存储结构,其结点类型定义如下: typedef st ...

  6. 【数据结构】求以孩子兄弟表示法存储的森林的叶子结点数,树高

    1.求叶子结点数 T的第一个孩子存在T->firstChild里,所以如果T连第一个孩子都没有,那肯定为叶子结点,也就是说T->firstChild==NULL. 所以说,以孩子兄弟表示法 ...

  7. 采用孩子兄弟表示法建立一棵树

    采用孩子兄弟表示法建立一棵树. 说明:因为孩子兄弟表示法的特点,不好用递归创建,所以利用队列来存放结构体. 注意:当指针作为函数参数时,不能改变实参指针的指向,只能改变实参指针所指向的数据 #incl ...

  8. c语言实现全排列并存储,C语言实现全排列和回溯法总结

    一.递归实现全排列 #include"cstdio" int A[]; void print_permutation(int n,int *A,int cur){ if(cur== ...

  9. java 孩子节点所有_树的孩子-兄弟结点存储之Java实现

    /** * 本类为树(孩子-兄弟存储)的结点 * * @version 1.0, 2008-01-24 * @author 李赫元 北京交通大学 * @since JDK1.6 */ public c ...

最新文章

  1. linux 编程笔记1 crusher for linux
  2. 这8个方法让你成为最优秀的程序员
  3. java 存储png文件_vue图片上传及java存储图片(亲测可用)
  4. AeroFS 开源 SSMP 协议,包含 Java 和 Go 实现
  5. android studio的一个bug
  6. github 怎么搜索_实用!8个玩转GitHub的小插件,快来试试吧!
  7. Linux下查看端口状态的小工具lsof
  8. linux mysql驱动在哪_MySQL驱动使用方法
  9. 关于H3C-WAP712C AP的胖瘦切换说明
  10. win7 计算机刷新dns,刷新dns,教您怎么刷新DNS
  11. Postman下载与安装操作步骤(只有两步骤下载)
  12. android如何修改视频的分辨率,Android录制视频,视频压缩,设置分辨率,设置视频名称...
  13. 华尔街见闻:泰格马克引领未来AI《见面》之旅
  14. 7月22日自助装机配置专家点评
  15. SIM800C EAT开发
  16. 谈谈大学两年的学习经历
  17. 【瑞芯微Rockchip Linux平台】SoftAp需求实现(3)动态获取BT Mac地址并更新beacon帧中的mac信息
  18. 项目时间管理-知识领域
  19. Jquery入门指南教程
  20. C# winform 学习(一)

热门文章

  1. 用善良与热忱让服务升温 麦田房产获得客户信赖
  2. 知虾数据:店铺精细化运营提高商品曝光率,远超出竞品效果
  3. Altium Designer(17.0)原理图模板设计
  4. HoloLens2的vuforia模型识别
  5. 软件测试mysql面试题:int(20)中20的涵义?
  6. Java多线程基础(一)
  7. Java高级工程师面试题整理
  8. anaconda 上实现Tensorflow MASK R-CNN Demo Windows (CPU版)
  9. 电子学会图形化一级编程题解析:猫捉老鼠
  10. ckc交易什么意思_小白买基金,什么都不懂?100个问题带你揭秘基金神秘面纱(五)...