20、(树)基础知识

文章目录

  • 树( Tree)
    • 树的工程背景实例
    • 树的定义
    • 树的相关术语
    • 树的顺序存储结构方法
      • 双亲孩子表示法(数组存储)
      • 双亲表示法(数组存储)

树( Tree)

树的工程背景实例

  • 图书馆的书目分类系统
  • 操作系统中的文件目录结构
  • 网站的索引结构
  • 表达式树(中缀、前缀、后缀)

树的定义

树(tree)是包含n个结点的有限集合:

  • 有一个根结点,它只有直接后继,没有直接前驱结点
  • 除根结点之外的其余数据元素被分为m个具有根的子树
  • 当树的集合为空时,n = 0, 此时称为空树,空树中没有结点
  • 没有子树的结点,被称为叶子结点
  • 树中的任何一个结点都可以有0个或多个直接后继(即孩子结点),但至多只能有一个直接前驱结点(即双亲结点)
  • 只有根结点没有直接前驱结点;只有叶子结点没有直接后继结点
  • 祖先结点和子孙结点是父子关系的扩展,它定义了树中结点之间的纵向次序
  • 有序树中,同一组兄弟结点间从左到右有长幼秩序之分。如果对这个关系进行扩展,那么可以认为兄弟结点定义了树的横向次序

树的相关术语

  • 树的结点:包含一个数据元素及若干指向子树的分支
  • 孩子结点:某结点的子树的根成为该结点的孩子结点
  • 双亲结点:某结点的的直接上层结点称为该结点的双亲结点
  • 兄弟结点:同一双亲结点下的各孩子结点之间互为兄弟结点
  • 结点层:根结点为第1层结点;根结点的孩子结点为第2层结点,依此类推
  • 树的深度:树中结点的最大层,也称为树的高度
  • 树的度:树中最大的结点度
  • 结点的度:结点子树的个数
  • 分枝结点:度不为0的结点
  • 叶子结点:是度为0的结点,也叫终端结点
  • 有序树:子树有序(有顺序要求)的树(如家谱、书的目录)
  • 无序树:不考虑子树的顺序(计算机中的文件目录)
  • 森林:互不相交的树的集合,树中每个结点的子树的集合既可以称为森林

树的顺序存储结构方法

双亲孩子检验原则(存储树形结构的核心):能够得到一个结点的双亲结点和孩子结点

双亲孩子表示法(数组存储)

// Degree:树的度
// N:树的结点数

typedef struct
{
    ElemType data;// 结点的数据域
    int parent;// 双亲结点的索引
    int child[Degree];// 存储孩子结点索引的数组
}PCTree;

PCTree tree[N];

双亲表示法(数组存储)

// N:树的结点数

typedef struct
{
    ElemType data;// 结点的数据域
    int parent;// 双亲结点的索引
}PTree;

pTree tree[N];

你可能感兴趣的:(数据结构,学习笔记)