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

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

二叉树的存储结构

顺序存储

#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.dtcms.com/a/76140.html

相关文章:

  • 使用python seaborn创建配对图:从核心概念到实战案例
  • 跨系统投屏:Realme手机(远程)投屏到Linux系统的简单方法
  • winx64 安装对应版本火狐浏览器驱动
  • 图生生AI修图,用“画面扩充“重构创作想象
  • 基于FPGA的3U机箱温度采集板PT100,应用于轨道交通/电力储能等
  • 如何在 Github 上获得 1000 star?
  • AI预测体彩排3新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月18日第22弹
  • 如何把视频转成动态图?
  • 调试 Rust + WebAssembly 版康威生命游戏
  • 【JavaEE】Mybatis 简单启动
  • 技术革命、需求升级与商业生态迭代——基于开源AI大模型与智能商业范式的创新研究
  • Batch Norm和Layer Norm
  • 《论语别裁》第01章 学而(29) 《三国演义》的幕后功劳
  • ubuntu20.04关机进程阻塞解决方法
  • 3.17BUUCTF练习day1
  • MySQL 客户端连不上(1045 错误)原因全解析
  • 项目实战:基于瑞萨RA6M5构建多节点OTA升级-创建工程MCUBoot<二>
  • el-table的向上移动向下移动,删除选定行
  • 【Git学习笔记】Git分支管理策略及其结构原理分析
  • 探秘Transformer系列之(15)--- 采样和输出
  • 小程序API —— 53 本地存储
  • 1~2 课程简介+ESP32-IDF环境搭建(虚拟机Linux环境下)
  • 大语言模型的压缩技术
  • AI如何在财务工作中提升效率的一些看法
  • JavaScript日期区间计算:精准解析年月日差异
  • EG8200多协议图形化编程边缘计算网关
  • Python----计算机视觉处理(Opencv:图像镜像旋转)
  • 大数据分析方法(65页PPT)
  • cmake 之 check_language()
  • AIP-182 外部软件依赖