数据结构之二叉树的存储方式

举报
芒果_Mango 发表于 2022/02/26 21:37:49 2022/02/26
【摘要】 二叉树的存储结构二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。 1.顺序存储顺序存储顺序结构存储就是使用数组来存储一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。完全二叉树的顺序存储 经典结论:假设parent是父亲结点在数组中的下标则左孩子 = parent*...

二叉树的存储结构

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。


1.顺序存储

  1. 顺序存储
    顺序结构存储就是使用数组来存储一般使用数组只适合表示完全二叉树
  2. 因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。
  3. 二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

完全二叉树的顺序存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qys9PoQT-1637302369105)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211107142711818.png)]


经典结论:

假设parent是父亲结点在数组中的下标

则左孩子 = parent*2+1

右孩子 = parent* 2 + 2

假设孩子的下标是child,不管左孩子还是右孩子 parent = (child - 1) / 2

如果算出来下标不再数组范围内->说明其没有孩子/没有父亲结点->根节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b07Nrtar-1637302369106)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211107144207165.png)]


非完全二叉树的顺序存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YtNKp9A5-1637302369106)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211107142730063.png)]


不是完全二叉树也可也用数组存储,但是可能会浪费很多空间


2.链式存储

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。

通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。

链式结构又分为二叉链和三叉链

> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPk0iSR0-1637302369107)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211107143424630.png)]



二叉链

typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
    struct BinTreeNode* _pLeft; // 指向当前节点左孩子
    struct BinTreeNode* _pRight; // 指向当前节点右孩子
    BTDataType _data; // 当前节点值域
}

三叉链

// 三叉链
typedef int BTDataType;
struct BinaryTreeNode
{
    struct BinTreeNode* _pParent; // 指向当前节点的双亲
    struct BinTreeNode* _pLeft; // 指向当前节点左孩子
    struct BinTreeNode* _pRight; // 指向当前节点右孩子
    BTDataType _data; // 当前节点值域
}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。