数据结构-树结构

一、树的基本概念

树是一种非线性数据结构,由n(n≥0)个节点组成,类比现实中的树,包含根、枝干和叶子。当n=0时为空树;n≥1时,有且仅有一个根节点(无父节点),其余节点可分为若干个互不相交的子集,每个子集都是一棵独立的子树。树的核心术语包括:父节点(直接上层节点)、子节点(直接下层节点)、兄弟节点(同一父节点的子节点)、叶子节点(无子女的节点)、节点的度(子节点个数)、树的深度(从根到最远叶子的层数,根为第1层)、树的高度(从叶子到根的最大层数)、路径(从根到某节点的节点序列)。

二、树的核心特性

  1. 根节点唯一,无父节点,其余节点有且仅有一个父节点;

  2. 节点间通过父子关系连接,不存在环路(否则为图结构);

  3. 树的子树互不相交,任意两个节点间有且仅有一条路径;

  4. 树的层次结构体现了"一对多"的逻辑关系,区别于线性结构的"一对一"。

三、常见树的类型

  1. 二叉树(最常用)

每个节点最多有两个子节点,分别称为左子树和右子树,子树有左右顺序之分(不可交换)。二叉树的特殊形态包括:

• 满二叉树:除叶子节点外,每个节点都有两个子节点,且叶子节点在同一层;

• 完全二叉树:按层序遍历(从上到下、从左到右)填充节点,除最后一层外,每一层节点数均为最大值,最后一层节点集中在左侧(右侧可空缺);

• 斜树:所有节点都只有左子树(左斜树)或右子树(右斜树),本质等同于线性结构。

  1. 其他常见树

• 二叉搜索树(BST):左子树所有节点值<根节点值,右子树所有节点值>根节点值,支持高效的查找、插入、删除操作(理想情况时间复杂度O(logn));

• 平衡二叉树(AVL树):二叉搜索树的优化版,任意节点的左右子树高度差绝对值≤1,避免斜树导致的O(n)复杂度;

• 红黑树:一种自平衡二叉搜索树,通过颜色规则(红/黑节点)维持平衡,插入删除效率高于AVL树,常用于Java的TreeMap、C++的std::map;

• 多叉树:节点可以有多个子节点,典型例子是B树(多路平衡查找树),常用于数据库索引;

• 哈夫曼树(最优二叉树):带权路径长度最短的二叉树,用于哈夫曼编码(数据压缩)。

四、树的遍历方式(以二叉树为例)

遍历核心是按一定顺序访问所有节点,二叉树有四种基础遍历方式,均基于递归或迭代实现:

  1. 前序遍历(根-左-右):先访问根节点,再递归遍历左子树,最后递归遍历右子树;

  2. 中序遍历(左-根-右):先递归遍历左子树,再访问根节点,最后递归遍历右子树(二叉搜索树的中序遍历结果为有序序列);

  3. 后序遍历(左-右-根):先递归遍历左子树,再递归遍历右子树,最后访问根节点;

  4. 层序遍历(广度优先):按树的层次从上到下、同一层从左到右依次访问节点,需借助队列实现。

五、树的应用场景

• 数据存储与检索:二叉搜索树、红黑树、B树用于高效查找(如数据库索引、集合框架);

• 层级关系表示:文件系统(目录树)、组织架构图、XML/HTML文档结构;

• 算法优化:哈夫曼编码(数据压缩)、决策树(机器学习)、广度优先搜索(BFS)/深度优先搜索(DFS)的底层结构;

• 其他:前缀树(字典树,用于字符串匹配)、线段树(区间查询与更新)。

相关推荐
小欣加油1 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
做cv的小昊2 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
星恒随风2 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
烬羽4 小时前
从零理解树与二叉树:用 JS 带你手撕遍历和递归
javascript·数据结构
YHL4 小时前
🚀从零理解树与二叉树 —— 概念、实现与遍历
前端·javascript·数据结构
JieE2125 小时前
JS 到底有多少种数据类型?从ECMA规范到内存本质,一文彻底搞懂
javascript·数据结构·面试
努力努力再努力wz5 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
八解毒剂6 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
伊布拉西莫6 小时前
【流畅的Python】第20章:并发执行器 — 学习笔记
笔记·python·学习