数据结构—树的存储结构

141 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

前言

树的存储结构

树有三种常用存储方式:

  1. 双亲表示法
  2. 孩子表示法
  3. 孩子兄弟表示法

双亲表示法

这种方法主要是用一组连续空间来存储树的结点,同时在每个结点中附设一个指示器,指示其双亲结点在链表中的位置。

具体方法如下图:Data域存储节点的值,Parent域存储节点的双亲位置

image.png

这种方式有一个缺点就是——求结点的孩子结点时需要遍历整个结构

孩子表示法

这种方式的思路是将每个结点的孩子排列起来,形成一个带表头(装父亲结点)的线性表(n个结点要设立n个链表),再将n个表头用数组存放起来,这样就形成一个混合结构。

具体方法如下图:可以看到所有的节点顺序排列在存储空间中,不同的是使用链表的结构将每个节点的孩子节点连起来。例如A的孩子节点是B和C,这一点在孩子表示法中能很清楚的看到。

image.png

孩子兄弟表示法

这种方式用二叉链表来存储树,但链表的两个指针域含义不同。

存储结构如下所示:

image.png

这种存储方式可以很好的引入树和二叉树的转换。前面说过所有的树都可以转换为二叉树,这里就得到了方法。

树与二叉树的转换

转换步骤:

  1. 节点的第一个孩子做为其左孩子
  2. 节点的右临近兄弟做为其右孩子

这种方式可以保证所有的树都可以转换为二叉树。