数据结构笔记:树

树的基本术语
树的度:树中各结点度的最大值
结点的度:结点所拥有的子树的个数
分支结点:度不为 0 的结点,也称为非终端结点
叶子结点:度为 0 的结点,也称为终端结点
双亲:这个结点称为它孩子结点的双亲结点
孩子:树中某结点子树的根结点称为这个结点的孩子结点
兄弟:具有同一个双亲的孩子结点互称为兄弟
路径:结点序列 n, n, …, nk 称为一条由 n1 至 nk 的路径,当且
仅当满足如下关系:结点 ni是 ni+1 的双亲(1<=i<k)
路径长度:路径上经过的边的个数
在树结构中,路径是唯一的
祖先、子孙:如果有一条路径从结点 x 到结点 y, 则 x 称为 y 的祖先,而 y 称为 x 的子孙
结点所在层数:根结点的层数为 1;对其余结点,若某结点在
第 k 层,则其孩子结点在第 k+1 层
树的深度(高度):树中所有结点的最大层数
树的宽度:树中每一层结点个数的最大值

表示法

树的双亲表示法:用一维数组存储树中各个结点(一般按层序存
储)的数据信息以及该结点的双亲在数组中的下标
定义‘


template <typename DataType>
struct PNode
{
DataType data; 
int parent; 
};

孩子表示法
方案一:指针域的个数等于树的度
方案二:指针域的个数等于该结点的度

将结点的所有孩子构成一个单链表来表示结点的孩子

定义


struct CTNode //孩子结点
{
int child;
CTNode *next;
};
template <typename DataType>
struct CBNode //表头结点
{
DataType data;
CTNode *firstChild; //指向孩子链表的头指针
};

树的孩子兄弟表示法(二叉链表):链表中的每个结点包括数据
域和分别指向该结点的第一个孩子和右兄弟的指针

定义


template <typename DataType>
struct TNode
{
DataType data;
TNode<DataType> *firstChild, *rightSib;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值