二叉树练习(二):树的双亲表示法及其部分算法实现

本文介绍了双亲表示法在树结构中的应用,通过C++代码展示了如何创建树、计算树的高度以及输出所有叶节点。树的节点数据和父节点下标存储在数组中,便于快速访问父节点,但寻找子节点需遍历。文章提供了一个具体的树结构示例,并提供了相关操作的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意,本文归类于“二叉树练习”系列文章,但具体的解释、实现均为普通的树而并非二叉树,望读者注意。

概念

双亲表示法,即储存树结点的同时储存其所属的父结点的表示法,通常利用顺序表(数组)实现。使用双亲表示法储存树,使得树具有如下特性:

  • 可以快速地找到一个结点的父结点
  • 寻找一个结点的子节点需要遍历整颗树

结构定义

使用C++实现。需要注意,Tree结构体内的Node数组不是以指针的形式定义,而下文Tree结构体却使用指针来储存,要注意区分指针的解引用符号“->”和对象的“.”符号的区别。

const int MAX_SIZE = 102; //数组的大小,即整颗树可以有的最多结点数量,我定为102

//树结点
struct Node
{
    char data; //树结点所携带的数据
    int parent; //该结点对应的父亲结点的数组下标
};

//树
struct Tree 
{
    Node nodes[MAX_SIZE]; //存放所有树结点的数组
    int size; //树结点数量
};

创建树

为方便起见,这里使用王道数据结构书里给的树结构作为例子,树的结构示意图如下:

树结构示意图

 使用双亲表示法表示后:

双亲表示法

 代码:

Tree *CreateTree()
{
    Tree *tree = (Tree *)malloc(sizeof(Tree))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值