跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

数据结构:堆与链式二叉树详解

堆的基本概念、性质及实现方式,包括大根堆和小根堆的定义,以及基于数组的完全二叉树索引规律。同时讲解了链式二叉树的结构体定义,并详细阐述了前序、中序、后序三种遍历方法的访问顺序及示例。内容涵盖数据结构核心知识点,适合算法学习者参考。

魔法巫师发布于 2026/3/29更新于 2026/7/2750 浏览
数据结构:堆与链式二叉树详解

1. 堆的概念和定义

1.1 堆

定义:是特殊的二叉树,分为大堆和小堆。

  • 大堆(大根堆):根节点最大的堆。堆中某个结点的值总是不小于其父结点的值。
  • 小堆(小根堆):根节点最小的堆。堆中某个结点的值总是不大于其父结点的值。
  • 堆总是一棵完全二叉树。

1.2 二叉树的性质

有 n 个结点的二叉树,从上到下从左到右从 0 开始依次编号,对于编号为 i 的结点有以下性质:

  • i 结点的父结点:(i-1)/2
  • i 结点的左孩子结点:2i+1
  • i 结点的右孩子结点:2i+2
  • 若 2i+1 或 2i+2 >= n,则没有左右孩子。

2. 堆的实现

typedef int HPDataType;
typedef struct Heap {
    HPDataType* a;
    int size;
    int capacity;
} HP;

// 默认初始化堆
void HPInit(HP* php);
// 利用给定数组初始化堆
void HPInitArray(HP* php, HPDataType* a, int n);
// 堆的销毁
void HPDestroy(HP* php);
// 堆的插入
void HPPush(HP* php, HPDataType x);
// 获取堆顶数据
HPDataType HPTop(HP* php);
// 删除堆顶的数据
void HPPop(HP* php);
// 判空
bool HPEmpty(HP* php);
// 求 size
int HPSize(HP* php);
// 向上调整算法
void AdjustUp(HPDataType* a, int child);
// 向下调整算法
void AdjustDown(HPDataType* a, int n, int parent);

3. 实现链式二叉树

3.1 链式二叉树的概念

用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。

typedef int BTDataType;
// 二叉链
typedef struct BinaryTreeNode {
    struct BinTreeNode* left;   // 指向当前结点左孩子
    struct BinTreeNode* right;  // 指向当前结点右孩子
    BTDataType val;             // 当前结点值域
} BTNode;

3.2 前中后遍历

按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历:

  1. 前序遍历 (Preorder Traversal):访问顺序为 根结点、左子树、右子树。
  2. 中序遍历 (Inorder Traversal):访问顺序为 左子树、根结点、右子树。
  3. 后序遍历 (Postorder Traversal):访问顺序为 左子树、右子树、根结点。

3.3 遍历(举例)

遍历示例

  • 前序遍历(根左右):A ,B,D,NULL,NULL,NULL,C,E,NULL,NULL,F,NULL,NULL
  • 中序遍历(左根右):NULL,D,NULL,NULL,B,A,NULL,E,NULL,C,NULL,F,NULL
  • 后序遍历(左右根):NULL,NULL,D,NULL,B,NULL,NULL,E,NULL,NULL,F,C,A

目录

  1. 1. 堆的概念和定义
  2. 1.1 堆
  3. 1.2 二叉树的性质
  4. 2. 堆的实现
  5. 3. 实现链式二叉树
  6. 3.1 链式二叉树的概念
  7. 3.2 前中后遍历
  8. 3.3 遍历(举例)
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • MCP Server Node.js 开发环境搭建与部署指南
  • Windows 环境下配置 Claude Code 使用 Git Bash 指南
  • Win11 资源管理器增强:QTTabBar 中文优化版安装与配置指南
  • Python 核心基础知识点汇总
  • AUTOSAR 配置文件(ARXML)版本不一致的管理策略
  • 基于 Node.js 本地部署 Gemini 生成的 3D 手部粒子追踪应用
  • 基于浏览器扩展实现微信网页版访问方案
  • Mac Mini M4 本地部署大模型:Ollama、Llama 与 ComfyUI 环境搭建
  • 深入理解 OverlayFS:分层机制下的 Linux 文件系统重组
  • 二次元 AI 绘画工具实战指南:从入门到进阶
  • Python 中 == 与 is 的区别及最佳实践
  • 从零搭建 AI 开发环境并编写首个 AI 应用
  • 动态规划解斐波那契问题:三步、爬楼梯与解码方法
  • YOLO26 无人机巡检案例:高空拍摄目标识别实战
  • HeyGem.ai 开源 AI 数字人安装配置指南
  • 阿里开源 Page-Agent:一行 JS 代码实现大模型寄生前端 DOM
  • Java Web 开发:数据库知识复习与整理
  • 基于 AI 辅助开发电商系统核心模块实战指南
  • P2P 网络(Peer-to-Peer Network)基础架构与区块链应用
  • Intel GPU 加速 llama.cpp:SYCL 后端配置与性能调优指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online