树和二叉树 - 树


树的定义是递归的:在树的定义中又用到树的定义。

树是一种非线性数据结构
特点: (1)没一个节点有且只有一个前驱节点(根节点除外)
(2)数据结点按分支关系组织,清晰反映了数据元素的层次关系
(3)数据元素之间是一对多的关系

树的逻辑结构的表示方法:
(1)树形表示法
这里写图片描述

(2)文氏图表示法
这里写图片描述

(3)凹入表示法
这里写图片描述

(4)括号表示法

A( B( E, F ), C ( G( J ) ), D( H, I( K, L, M )))


树的基本术语

节点的度:某节点的子树的个数
树的度: 树中各节点的度的最大值

分支结点:度不为零的节点
叶子节点:度为零的节点(终端节点)

路径: 从Ki出发“自上而下”到达Kj所通过的树中节点的系列
路径长度:路径所通过的节点个数减1:(如:A->K 路径为:A->D->I->K 长度为3)

树的性质

树中的节点数等于所有节点的分支数加1

度为m的树中的第i层上最多有m^(i-1)个节点
度为m的树中每个节点最多有m个子节点
当一棵m次树的第i层上有m^(i-1)个节点时,称该层是满的

高度为h的树最多有这里写图片描述 个节点
节点数之和 这里写图片描述

具有n个节点的m次树的最小高度为 这里写图片描述 (向上取整)


树的遍历运算

这里写图片描述

先根运算:
(1)访问根节点。
(2)按照从左到右的次序依次遍历根节点的每一棵树
上图先根遍历的结果:ABEFCGJDHIKLM

后根遍历:
(1)按照从左到右的次序后根遍历根节点的没一棵子树
(2)访问根节点
上图后根遍历的结果:EFBJGCKLMIDA

层次遍历:
(1)从根结点开始,按从上到下,从左到右的次序访问树中的每一个节点
上图层次遍历的结果:ABCDEFHIJKLM


树的存储结构

双亲存储结构:

Struct PTree{
    T data;     //存放节点的值
    int parent; //存放节点的位置(伪指针)
};
PTree t[MaxSize];//MaxSize最大存放节点数

(a) (b)

(1)利用每个节点(根节点除外)只有唯一的双亲性质
(2)访问双亲节点容易,求孩子节点需要遍历整个结构

孩子链存储结构:

这里写图片描述
(1)查找孩子节点方便,查找双亲节点费时
(2)含n个节点的m次树采用孩子链存储结构有(m*n-n+1)个空指针域

Struct PSonNode{
    T data;         //存放节点的值
    PSonNode *Sons[MaxSons];//指向孩子节点,MaxSons:树的度->某节点最多的孩子节点个数
};

这里写图片描述

孩子兄弟链存储结构:

Struct PSBNode{
    T data;         //存放节点的值
    PSBNode *vp;    //指向孩子节点
    PSBNode *hp;    //指向兄弟
};

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值