数据结构-树与森林-孩子兄弟表示法

本文探讨了树的数据结构,重点是使用孩子、兄弟表示法进行链式存储,其中每个结点包含数据域和指向孩子及兄弟的指针。在森林的表示中,通过将树的二叉链表连接起来实现。还介绍了如何进行先序和后序遍历,并提供了求解森林深度和叶子数量的方法。

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

这里我们讨论树的表示及其遍历操作,并建立森林与二叉树的对应关系。

用到的是孩子、兄弟表示法:链式存储,每个结点包含数据域和两个指针域,左指针指向第一个孩子结点。右指针指向兄弟结点。又称二叉链表存储法。

单颗树的二叉链表存储结构中根结点的右指针必为空,若要存储多棵树组成的森林,可将后一颗树的根结点看成前一颗树根结点的兄弟,即将后一颗树对应的二叉链表拼接到前一颗树根结点的右指针上,这称为森林的孩子-兄弟表示法或二叉链表存储法。

首先是辅助宏:

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
#define UNDERFLOW -2
#define NULL 0
typedef int Status;
typedef char TElemType;

二叉树的二叉链式存储结构定义:

typedef struct BiTNode{
   TElemType data;
   struct BiTNode *lchild,*rchild; //左孩子结点 右孩子结点
}BiTNode,*BiTree;

森林的孩子-兄弟表示法的存储结构定义:

typedef struct CSNode{
    TElemType data;
    struct CSNode *firstchild,*nextsibling;
}CSNode,*CSTree;

根据已经存在的二叉树BiT 转换成孩子兄弟表示法得到的树或森林T 原二叉树BiT保持不变.

Status BiTreetoTreeorForest(BiTree BiT,CSTree &a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值