跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C算法

数据结构 - 初阶:树的基本概念与结构

树作为非线性数据结构的核心,由 n(n>=0) 个有限节点组成层次关系集合。文章详解了根节点、子树、度、深度等术语定义,对比非树形结构特征。重点讲解孩子兄弟表示法的结构体设计与指针逻辑,并列举文件系统作为实际应用场景,帮助读者建立清晰的树形模型认知。

开源信徒发布于 2026/3/16更新于 2026/4/241 浏览
数据结构 - 初阶:树的基本概念与结构

数据结构 - 初阶:树的基本概念与结构

在掌握了线性表之后,我们进入非线性结构的学习。今天我们将深入探讨树(Tree)这一核心数据结构,它是后续学习二叉树、堆及图论的基础。

一、树的相关概念

提到树,大家容易联想到植物。计算机中的树确实借鉴了这种形态,但方向是倒置的:根在上,叶在下。

树形结构示意图

1. 树的概念与结构

树是一种非线性的数据结构,由 n(n>=0) 个有限节点组成一个具有层次关系的集合。之所以称为树,是因为它看起来像一颗倒挂的树,根节点朝上,叶子节点朝下。

  • 根节点:没有前驱节点的节点。
  • 子树:除了根节点外,其余节点被分成 m(m>0) 个互不相交的集合 T1, T2...Tm,每个集合本身又是一棵结构与树类似的子树。
  • 递归定义:每棵子树的根节点有且只有一个前驱,可以有 0 个或多个后驱。

注意:树形结构中,子树不能有交集,否则就不是树形结构,而是图了。

非树形结构示例

  • 标有问号的部分表示子树中有交集,相交即为图。
  • 除根节点外,其他节点有且仅有一个父节点。
  • 一棵 N 节点的树有 N-1 条边。

2. 树的相关术语

通过下图可以更直观地理解这些术语:

树的结构图

  • 父节点/双亲节点:若一个节点含有子节点,则该节点为子节点的父节点。例如 A 是 B 的父节点。
  • 子节点/孩子节点:一个结点含有的子树的根节点称为该节点的子结点。例如 B 是 A 的子结点。
  • 结点的度:一个结点有几个孩子,它的度就是多少。如 A 的度是 6,F 的度是 2。
  • 树的度:一棵树中,最大结点的度称为树的度。上图树的度为 6。
  • 叶子结点/终端结点:度为 0 的结点成为叶结点,如 B、C、H、I 等。
  • 分支结点/非终端结点:度不为 0 的结点,如 D、E、F、G 等。
  • 兄弟结点:具有相同父结点的结点互相称为兄弟结点,如 B、C 是兄弟结点。
  • 结点的层次:从根开始定义起,根为第 1 层,其子结点是第 2 层,以此类推。
  • 树的高度或者深度:树中结点的最大层次。上图树的高度为 4。
  • 结点的祖先:从根到该结点所经分支上的所有结点。A 是所有节点的祖先。
  • 路径:一条从树任意结点出发,沿父结点 - 子结点连接,达到任意结点的序列。比如 A 到 Q 的路径为 A-E-J-Q。
  • 子孙:以某个结点为根的子树中任一结点都称为该节点的子孙。
  • 森林:由 m(m>0) 棵互补相交的树的集合称为森林。
  • 3. 树的表示方法

    树结构相对线性表比较复杂,存储和表示都需要兼顾值域和结点关系。实际中常见的表示法包括双亲表示法、孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。

    在众多方法中,我们选择孩子兄弟表示法。这是前辈们在探索树时总结出的经典方案,便于理解和实现。

    下面是树的结构体定义:

    struct TreeNode {
        struct TreeNode* child; // 指向左边开始的第一个孩子结点
        struct TreeNode* brother; // 指向其右边的下一个兄弟结点
        int data; // 结点中的数据域
    };
    

    怎么理解这个结构体呢?不着急,请看下图示意:

    结构体映射图

    我们以这个图为例,这棵树在结构体中的具象化就应该是这样子的:

    结构体实例

    这里有个细节要注意:child 指针指向的是最左边的孩子,而 brother 指针指向的是同一个父节点下的下一个兄弟。通过这两个指针,我们可以遍历整棵树的所有节点。

    4. 树形结构在生活中的具体应用

    树形结构在生活中随处可见,最简单的例子莫过于电脑上的文件管理器。文件管理都是一层一层向下管理的,目录即节点,文件即叶子。

    文件系统结构

    文件夹层级

    以上就是对树的概念内容的分享,希望这些内容能帮助你建立起清晰的树形模型认知。

    目录

    1. 数据结构 - 初阶:树的基本概念与结构
    2. 一、树的相关概念
    3. 1. 树的概念与结构
    4. 2. 树的相关术语
    5. 3. 树的表示方法
    6. 4. 树形结构在生活中的具体应用
    • 💰 8折买阿里云服务器限时8折了解详情
    • 💰 8折买阿里云服务器限时8折购买
    • 🦞 5分钟部署阿里云小龙虾了解详情
    • 🤖 一键搭建Deepseek满血版了解详情
    • 一键打造专属AI 智能体了解详情
    极客日志微信公众号二维码

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

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

    更多推荐文章

    查看全部
    • 滑动窗口算法实战:串联所有单词的子串与最小覆盖子串
    • Ubuntu 下 Python 连接 KingbaseES 数据库实现增删改查
    • CSS 元素显示模式详解:块级、行内与转换实战
    • AI 前端 Agent 学习路线图
    • AI 写小说提示词指南:角色、场景与剧情构建技巧
    • vcpkg:跨平台 C++ 包管理器使用指南
    • YOLOv8 模型输入尺寸设置与最佳实践
    • 位运算实战:判断字符唯一性与查找丢失数字
    • MySQL 数据库基础:概念、架构与核心使用指南
    • 数据结构初阶:二叉树链式存储实现
    • Windows 部署 OpenAkita 并接入飞书实现本地 AI 助手
    • Web 火车票务管理系统的设计与实现
    • Redis Java 客户端选型与 SpringBoot 集成实战
    • Linux 进程信号入门:从 Ctrl+C 到信号处理机制
    • Rust 实战:抓取 GitHub Trending 热门仓库
    • Higress 实战:将 REST API 转换为 MCP Server 工具
    • 李飞飞:武断 AI 政策损害开源社区;纽约大学教授称或被 Altman 误导
    • 如何在 GitHub Copilot 中使用 MCP 服务
    • 基于深度学习的宠物识别系统设计与实现
    • MirageLSD 实时直播流扩散模型:视频流自定义风格转换

    相关免费在线工具

    • 加密/解密文本

      使用加密算法(如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