数据结构 二叉树核心概念与特性

一、树与二叉树的基础概念

在数据结构中,树是一种典型的一对多关系的非线性结构,我们可以从节点、前驱后继、度、层、高度、深度这些维度来理解它的构成。

1. 树的核心术语

  • 节点 :是构成树形结构的基本单元,我们可以根据它的位置和作用进一步划分:
    • 根节点:树的起始节点,只有后继节点,没有前驱节点。
    • 分支节点:既有前驱也有后继的节点,在树形结构中最多只有一个前驱,但可以有多个后继。
    • 叶子节点:位于树的最末端,只有前驱,没有后继的节点。
  • 前驱(祖先):指的是当前节点的 "来源" 节点,也就是在路径上直接指向它的上一个节点。
  • 后继(子孙):是当前节点的后续节点,也就是由它直接指向的下一级节点。
  • :代表节点拥有的前驱或后继的数量,又可以细分为:
    • 入度:节点拥有的前驱数量,在树形结构中所有节点的入度均为 1。
    • 出度:节点拥有的后继数量,不同类型的节点出度不同,比如叶子节点的出度为 0。
  • :根节点所在的位置为第 1 层,每向下经过一个节点,层数就加 1。
  • 高度:一个节点的高度,是指从该节点到距离它最远的叶子节点之间的距离。
  • 深度:一个节点的深度,是指从根节点到该节点所经过的节点个数。
  • 树的高度 / 深度:整棵树的高度等于树的深度,也等于树的总层数。

二、二叉树的定义与特性

1. 二叉树的定义

二叉树是树形结构的一种特殊形式,它的核心约束是:每个节点最多有 2 个后继节点 ,这两个后继节点分别被称为左孩子 (左侧的子节点)和右孩子(右侧的子节点)。

2. 常见的二叉树类型

  • 满二叉树:一种理想的二叉树结构,其所有的叶子节点都在同一层上,并且除了叶子节点之外,每个节点都有左右两个子节点。
  • 完全二叉树:将二叉树的所有节点按层序展开并连续编号,若编号顺序与满二叉树的编号完全对应,就是完全二叉树。它的特点是叶子节点只会出现在最后两层,且最后一层的叶子节点都靠左排列。

3. 二叉树的重要特性

  • 第 k 层最多节点数 :在二叉树的第 k 层上,最多有 2^(k-1) 个节点(k ≥ 1)。
  • 前 k 层最多节点数 :在二叉树的前 k 层中,最多有 2^k - 1 个节点(k ≥ 1)。

三、二叉树的遍历方式

遍历是操作二叉树的基础,我们可以按照 ** 深度优先(DFS)广度优先(BFS)** 两大思路来遍历二叉树。

1. 深度优先遍历(DFS)

深度优先遍历的核心是沿着一条路径尽可能深地探索,直到无法继续再回溯,它包含三种常见的顺序:

  • 前序遍历 :访问顺序为 根 → 左 → 右
  • 中序遍历 :访问顺序为 左 → 根 → 右
  • 后序遍历 :访问顺序为 左 → 右 → 根

2. 广度优先遍历(BFS)

广度优先遍历也叫层序遍历,它的核心是按照树的层次,从上到下、从左到右依次访问每一个节点。


四、总结

二叉树是数据结构中非常重要的基础内容,无论是理解后续的平衡二叉树、红黑树,还是解决算法中的路径问题、动态规划问题,都离不开对二叉树概念和特性的掌握。后续我们还会结合具体的代码实现,来深入讲解二叉树的遍历和各种操作。

相关推荐
m0_706653232 小时前
跨语言调用C++接口
开发语言·c++·算法
皮皮哎哟2 小时前
数据结构:从队列到二叉树基础解析
c语言·数据结构·算法·二叉树·队列
一匹电信狗2 小时前
【高阶数据结构】并查集
c语言·数据结构·c++·算法·leetcode·排序算法·visual studio
愚者游世2 小时前
list Initialization各版本异同
开发语言·c++·学习·程序人生·算法
.小墨迹2 小时前
apollo中车辆的减速绕行,和加速超车实现
c++·学习·算法·ubuntu·机器学习
超级大只老咪2 小时前
DFS算法(回溯搜索)
算法
MicroTech20252 小时前
量子仿真新基石:MLGO微算法科技专用地址生成器驱动量子算法仿真革命
科技·算法·量子计算
Hello World . .2 小时前
数据结构:二叉树(Binary tree)
c语言·开发语言·数据结构·vim
WBluuue2 小时前
数据机构与算法:dp优化——倍增优化
c++·算法·leetcode·动态规划