树型结构(数据结构)

本文介绍了树型结构的基本概念,包括树的定义、度、叶子结点和分支结点等。详细讲解了树的三种存储结构:双亲表示法、孩子表示法(包括指针、数组和链表方式)以及孩子兄弟表示法。同时,概述了树的遍历方法,如前序遍历、后序遍历和层次遍历,以及树的线性表示形式,如括号表示和层号表示。
摘要由CSDN通过智能技术生成

6.1树的基本概念

树型结构是区别于线性结构的另一大数据结构,它具有分支性层次性

树是由n(n>=0)个结点构成的有限集合。n=0的树称为空树;当n!=0时,树中的结点度应该满足下列条件:

  1. 有且仅有一个特定的结点称之为根
  2. 其余结点分成m(m>=0)个互不相交的有限集合,T1,T2,…,Tm,其中每一个集合又都是一颗树,称T1,T2,…,TM为根结点的子树。
  3. 以上是一个递归定义。

树的度:我们将一结点拥有的子女数称为该结点的度,树中所有结点度的最大值称为树的度。

叶子结点:称度为0的结点为终端结点或者叶子结点。

分支结点:称度不为0的结点为非终端结点或分支结点。

树枝:树中连接两个结点的线段称为树枝

路径:在树中,若从结点Ki开始沿着树枝自上而下能到达结点kj,则称ki到kj存在一条路径。路径的长度等于所经过的树枝数。

树中结点的层次:从树根开始定义,根节点为第1层,根的子女结点构成第2层,以此类推。若某结点kj位于第i层,则其子女就位于第i+1层。

树的深度或高度:称树中结点的最大层次数为树的深度或高度。

有序树:若树中任意结点的子树均看成是从左到右有次序的,不能随意交换,则称该树是有序树;否则称为无序树。

森林:由m(m>=0)颗互不相交的树构成的集合称为森林。森林和树的概念十分相近,一颗树中每个结点的子树所构成的几个即为一个森林,而在森林中的每棵树之上加一个共同的根,森林就成为了一棵树。

6.3树的存储结构

常用的树的存储结构有三种:双亲表示法、孩子表示法、孩子兄弟表示法

6.3.1双亲表示法

在树中,除根节点没有双亲外,其他每个结点的双亲是唯一确定的。故存储树中的结点应该包含两个信息:结点的值data和体现结点之间的相互关系的属性-----该结点的双亲parent。

可以将树中所有的结点存放在一个一维数组中。

#define MAXSIZE 100
typedef char datatype;
typedef struct node
{
   
    datatype data;
    int parent;
}node;
typedef struct tree
{
   
    node treelist[MAXSIZE];
    int length ,root;
}tree;
6.3.2孩子表示法

采用孩子表示法表示一棵树时,树中每个结点除了存储自身的值之外,还必须指出其所有子女的位置。 每个结点通常包含两个域:一个是元素的值域data,另一个为指针数组。数组中的每个元素均为一个指向该结点子女的指针;一颗m度的数,其指针数组的大小即为m

孩子表示法又分为三种:

  1. 指针方式的孩子表示法
  2. 数组方式的孩子表示法
  3. 链表方式的孩子表示法
1、指针方式的孩子表示法
#define m 3
typedef char datatype;
typedef struct node{
   
    datatype data;
    struct node *child[m];
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值