树的三种存储结构

本文介绍了树的四种存储方法:双亲表示法、孩子表示法、带双亲的孩子表示法和孩子兄弟表示法。每种方法都有其特点,如双亲表示法便于查找父节点,孩子表示法则利于操作子节点等。

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

这里写图片描述

双亲表示法

1、以一组连续的空间进行存储
2、在每个结点设一个指示器指示其双亲节点的位置
3、以数组来实现存储结构,指示器指示的是父结点的数组下标
4、求结点的孩子时需要遍历整个结构
5、而查找根结点时只需要反复调用查找结点的父结点。

这里写图片描述

孩子表示法

1、和双亲表示法相同,结点元素存储在一组连续的存储单元中
2、但在每个结点设的指示器不在指示其双亲节点的位置,而指向一个单链表的头指针
3、这个单链表是存储其所有孩子的一个单链表结构,单链表中数据内容为对应结点的数组下标。

typedef struct CTNode{
    int child;
    struct CTNode * next;
}* ChildPtr;
typedef struct{
    TElemType data;
    ChilPtr fistChild;
}CTBox;
typedef struct{
    CTBox nodes[MAX_TREE_SIZE];
    int noodNum,rootM;
}CTree;

这里写图片描述

带双亲的孩子表示法

typedef struct CTNode{
    int child;
    struct CTNode * next;
}* ChildPtr;
typedef struct{
    TElemType data;
    int parent;    //不同之处
    ChilPtr fistChild;
}CTBox;
typedef struct{
    CTBox nodes[MAX_TREE_SIZE];
    int nodeNum,rootM;
}CTree;

孩子兄弟表示法

1、二叉链表表示法
2、链表中结点有两个链表指针,fistChild and nextSibling
3、firstChild为结点的第一个孩子,若该结点有第二个孩子,则存储在第一个孩子的兄弟结点(nextSibling)中.
4、以此类推nextSibling存储下一个兄弟结点。

typedef struct CSNode{
    ElemType data;
    struct CSNode *firstChild , *nextSibling;
}CSNode , *CSTree;     //CS   ?  child、Sibling

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值