美文网首页
第六章:树结构

第六章:树结构

作者: mark_x | 来源:发表于2019-08-22 10:22 被阅读0次

概念

  1. 节点的子树根称为该节点的孩子,某节点的孩子就是该节点往下直接跟该节点相连的节点。
  2. 子树:每个节点+该节点往下所有元素→就是→该节点双亲节点的子树。

树的存储结构

回顾一下结构体与数组:
以整型数组为例,数组作为整体就是一个顺序结构,数组的每个节点就是一个int,由于int仅仅是一个数,不能存储多种信息,因此构造一个结构体节点,替代数组的int,这样每个节点就可以存储多种信息,而数组仍然作为一个数据框架,盛放每个结构体节点。
进一步,我们希望存储一些关于这个数组本身的整体信息,比如数组的长度、末尾元素的位置等等,当然我们可以在函数中定义一些变量来描述,但是这样就与数组本身分散开了,为了整洁起见,可以把数组及数组本身相关的信息封装在一个结构体中,这样在定义这样的一个结构体的同时就相当于同时定义了一个数组,以及与该数组相关的一些变量。

1. 双亲表示法

为每个节点定义结构体变量,每个节点存储①该节点数据②该节点的双亲的位置(下标);再用一个结构体封装一个树结构,包括一个数组,用于存储上面定义的节点,另外包含树的节点数、根的位置等信息。

// 树的存储结构 双亲表示法
#define MAXSIZE 128

typedef struct PTNode
{
    int data;  // 节点数据
    int parent;  // 双亲位置
}PTNode;

typedef struct  // 树结构
{
    PTNode nodes[MAXSIZE];  // 节点数组
    int r, n;  // 根的位置和节点数
}PTree;

2. 孩子表示法

修改双亲表示法的节点的结构,data不变还是用来存储每个元素的数据,将指示双亲位置的整型变量替换为指向孩子节点结构体的指针。
孩子节点结构体:因为每个节点有个数不等的孩子节点,利用链表存储这些孩子节点的位置。因此构造孩子节点结构体,数据项是该孩子节点的在主数组中的位置(下标),指针项指向下一个孩子节点。

// 孩子表示法
#define MAXSIZE 128

typedef struct CTNode
{
    int child;
    struct CTNode *next;
}*ChildPtr;

typedef struct
{
    int data;
    ChildPtr firstchild;
}Node;

typedef struct 
{
    CTNode nodes[MAXSIZE];
    int r, n;
}CTree;
双亲表示法和孩子表示法对比

这种结构对于我们要查找某个节点的某个孩子,或者某个节点的兄弟,只需要查找这个结点的单链表即可。
遍历整棵树(比如打印所有元素的数值)也是很方便的,对头结点的数组循环即可。

但是,这也存在问题,如何直接知道某个节点的双亲,此时需要遍历整个数组(整个树)。
改进:修改节点结构体,加入一个成员parent,用于标识双亲节点的位置(下标)

typedef struct
{
    int data;
    int parent;
    ChildPtr firstchild;
}Node;

相关文章

  • 数据结构 第六章 图

    [TOC] 第六章图 线性:线性表 栈 队列 数组: 广义表(11) 树结构:树,二叉树 (1多) 图结构 :图...

  • 第六章:树结构

    概念 节点的子树根称为该节点的孩子,某节点的孩子就是该节点往下直接跟该节点相连的节点。 子树:每个节点+该节点往下...

  • 第六章 二分搜索树

    第六章 二分搜索树 1 树结构无处不在 , 文件夹 , 图书馆书分类 , 公司的组织结构2 BST也是一种二分思...

  • 详谈树结构(传统树、字典树、hash 树、Merkle Patr

    关于数据结构中树结构的相关分享 本文参考: 树结构参考文献 一、传统的数据结构中的树结构 树结构是一种非线性存储结...

  • JavaScript 数据结构之二叉搜索树

    一、认识树结构 树结构示意图 树结构中的一些术语 树(Tree): n(n>=0) 个节点构成的有限集合 n = ...

  • Element-Ui el-tree 超出部分自动换行

    在使用element-ui 框架做vue 项目树结构时,发现需要固定树结构的宽度,而且树结构的字段有可能会特别长,...

  • MySql_web树结构

    很多网站的分类都是树结构,这里是一个理论上能实现无限级分类的树结构的方法。 创建库表 加入数据 取得树结构:

  • 03-树结构

    树结构依靠节点、叶子节点、子树将自身的数据扩展为像一棵倒过来的树 1. 什么是树结构 树结构依托路径、节点、叶子节...

  • JS树结构操作

    一、遍历树结构 1. 树结构介绍 JS中树结构一般是类似于这样的结构: 为了更通用,可以用存储了树根节点的列表表示...

  • 树结构

    树结构 动态查找树主要有: 二叉查找树(Binary Search Tree), 平衡二叉查找树(Balanced...

网友评论

      本文标题:第六章:树结构

      本文链接:https://www.haomeiwen.com/subject/dgrusctx.html