当前位置: 首页 > article >正文

数据结构 -- 二叉树的存储结构

二叉树的存储结构

顺序存储

#define MaxSize 100
struct TreeNode{
    ElemType value;		//结点中的数据元素
    bool isEmpty;		//结点元素是否为空
};

//定义一个长度为MaxSize的数组t,按照从上至下、从左至右的顺序依次完成存储完全二叉树中的各个节点
TreeNode t[MaxSize];
for (int i = 0;i<MaxSize;i++){
    t[i].isEmpty = true;		//初始化所有结点为空
}

几个重要常考的基本操作:

i 的左孩子 – 2i

i 的右孩子 – 2i+1

i 的父节点 – [i/2]

i 所在的层次 – [log2(n+1)]或[log2n]+1

【注意】如果是一颗普通的二叉树,依然按照层序将各节点顺序存储,那么结点间是没有上述的对应关系的

⭐所以在二叉树的顺序存储中,一定需要将二叉树的节点编号与完全二叉树对应起来

【存在问题】在最坏情况下,高度为h的且只有h个节点的单只树(所有结点只有右孩子),也至少需要2^h-1个存储单元

链式存储

//二叉树的结点(链式存储)
typedef struct BiTNode{
    ElemType data;						//数据域
    struct BiTNode * lchild,*rchild;	//左右孩子
}BiTNode,*BiTree;

⭐n个结点的二叉链表共有n+1个空链域(可以用于构造线索二叉树)

struct ElemType{
    int value;
};

typedef struct BiTNode{
    ElemType data;						//数据域
    struct BiTNode *lchild,*rchild;		//左右孩子指针
}BiTNode,*BiTree;

//定义一颗空树
BiTree root = NULL:

//插入根结点
root = (BiTree)malloc(sizeof(BiTNode));
root->data = {1};
root->lchild = NULL;
root->rchild = NULL;

//插入新结点
BiTNode *p = (BiTNode*)malloc(sizeof(BiTNode));
p->data = {2};
p->lchild = NULL;
p->rchild = NULL;
root ->lchild = p;		//作为根结点的左孩子

找到指定结点p的左右孩子 – p->lchild; p->rchild;

找到指定结点p的父节点 – 只能从根节点开始遍历

【解决】如果经常需要寻找父节点,可以使用三叉链表(添加一个父结点指针)

//二叉树的结点(链式存储)
typedef struct BiTNode{
    ElemType data;						//数据域
    struct BiTNode *lchild,*rchild;		//左右孩子指针
    struct BiTNode *parent;				//父结点指针(根据实际需要决定要不要添加)
}BiTNode,*BiTree;

http://www.kler.cn/a/591124.html

相关文章:

  • keepalived的工作原理和脑裂
  • ubuntu24.04虚拟机系统中挂载rootfs.img到rootfs_dir目录,使用chroot切换根目录到roofs_dir报错
  • 深度解析:通过 AIBrix 多节点部署 DeepSeek-R1 671B 模型
  • 传奇怪物素材 8方向高清怪物 PNG格式 游戏怪物 11组
  • linux 安全 xshell 使用
  • 【2025】基于python+django的实验室管理系统(源码、万字文档、图文修改、调试答疑)
  • AI爬虫 :Firecrawl的安装和详细使用案例(将整个网站转化为LLM适用的markdown或结构化数据)
  • AI智能土地利用变化分析系统
  • <video>标签的controlsList属性,它能实现哪些功能?
  • 简单记一些Kalibr在20.04安装下踩的坑
  • Matlab 汽车二自由度转弯模型
  • React类的生命周期
  • 在鸿蒙Next中开发一个月历组件
  • 蓝桥杯备考:DFS求最短路之字串变换
  • 【软考-架构】8.1、信息系统概述-生命周期
  • 6. 顺序表和链表*****
  • Web Component 教程(三):生命周期方法的触发时机与实际应用
  • vue中ref解析
  • 人工智能_大模型097_TRAE_AI开发工具_企业级项目开发---人工智能工作笔记0242
  • kali破解Pdf/execl/word