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

**存储方式**:使用数组按层次遍历顺序(自上而下、自左至右)存放结点,适用于**完全二叉树**

一、二叉树的核心性质

  1. 满二叉树的结点数:深度为kkk的满二叉树,其结点总数为2k−12^k - 12k1。这是因为每一层的结点数为2i−12^{i-1}2i1(第iii层),从第 1 层到第kkk层求和即得:
    ∑i=1k2i−1=2k−1 \sum_{i=1}^{k} 2^{i-1} = 2^k - 1i=1k2i1=2k1

  2. 终端结点与度 2 结点的关系:在任意二叉树中,设终端结点(叶子)个数为n0n_0n0,度为 2 的结点个数为n2n_2n2,则有:
    n0=n2+1 n_0 = n_2 + 1n0=n2+1
    推导依据是总边数等于所有结点出度之和,也等于父结点指向孩子的边数。

  3. 完全二叉树的深度:含有nnn个结点的完全二叉树,其深度为:
    ⌊log⁡2n⌋+1 \lfloor \log_2 n \rfloor + 1log2n+1
    因为前k−1k-1k1层构成满二叉树结构,最多包含2k−1−12^{k-1}-12k11个结点。


二、二叉树的分类(结合图示)

类型定义说明
满二叉树深度为kkk且总节点数为2k−12^k - 12k1的二叉树,每一层都达到最大节点数量。例如:深度为 3 的满二叉树有 7 个结点。
完全二叉树深度为kkk,结点数为nnn,且这些结点对应于深度为kkk的满二叉树中编号为 1 到nnn的结点。特点是除最后一层外,其余层全满;最后一层结点连续靠左排列。
非完全二叉树不满足“最后一层结点从左到右连续”的条件,如某个内部结点缺少左孩子但存在右孩子,或下层结点中间出现空缺(如图 3-18© 中 6 号结点左侧无兄弟)。

三、二叉树的顺序存储结构

存储方式:使用数组按层次遍历顺序(自上而下、自左至右)存放结点,适用于完全二叉树,能高效利用空间并快速计算父子关系。

对于编号为iii的结点(1≤i≤n1 \leq i \leq n1in):

  • 双亲结点:若i>1i > 1i>1,其双亲编号为⌊i2⌋\left\lfloor \frac{i}{2} \right\rfloor2i;当i=1i = 1i=1时为根结点,无双亲。
  • 左孩子结点:若2i≤n2i \leq n2in,左孩子编号为2i2i2i;否则不存在左孩子。
  • 右孩子结点:若2i+1≤n2i+1 \leq n2i+1n,右孩子编号为2i+12i+12i+1;否则不存在右孩子。

注:该编号规则基于从 1 开始编号。若编程中使用从 0 开始的数组索引,则需调整公式为:

  • 父节点:⌊i−12⌋\left\lfloor \frac{i-1}{2} \right\rfloor2i1
  • 左孩子:2i+12i + 12i+1
  • 右孩子:2i+22i + 22i+2

要证明在任意二叉树中,叶子结点(终端结点)个数 $ n_0 $ 与度为 2 的结点个数 $ n_2 $ 满足关系:

n0=n2+1 n_0 = n_2 + 1n0=n2+1

我们可以通过结点总数边的总数两个角度进行推导。


证明过程

设一棵二叉树中有:

  • $ n_0 $:度为 0 的结点数(即叶子结点)
  • $ n_1 $:度为 1 的结点数(只有左孩子或右孩子)
  • $ n_2 $:度为 2 的结点数(有两个孩子)

则整棵树的总结点数为:

n=n0+n1+n2(1) n = n_0 + n_1 + n_2 \tag{1}n=n0+n1+n2(1)

另一方面,从边的数量来看:

  • 每个结点(除根结点外)都由一条边连接到其父结点。
  • 所以总的边数为:$ n - 1 $

而这些边也可以通过各结点的出度(孩子数)来计算:

  • 度为 1 的结点贡献 1 条边,
  • 度为 2 的结点贡献 2 条边,
  • 度为 0 的结点贡献 0 条边。

因此,总边数也可表示为:

边数=0⋅n0+1⋅n1+2⋅n2=n1+2n2 \text{边数} = 0 \cdot n_0 + 1 \cdot n_1 + 2 \cdot n_2 = n_1 + 2n_2边数=0n0+1n1+2n2=n1+2n2

又因为边数等于 $ n - 1 $,所以有:

n1+2n2=n−1(2) n_1 + 2n_2 = n - 1 \tag{2}n1+2n2=n1(2)

将式 (1) 中的 $ n = n_0 + n_1 + n_2 $ 代入式 (2):

n1+2n2=(n0+n1+n2)−1 n_1 + 2n_2 = (n_0 + n_1 + n_2) - 1n1+2n2=(n0+n1+n2)1

两边同时减去 $ n_1 $:

2n2=n0+n2−1 2n_2 = n_0 + n_2 - 12n2=n0+n21

移项得:

2n2−n2=n0−1⇒n2=n0−1 2n_2 - n_2 = n_0 - 1 \Rightarrow n_2 = n_0 - 12n2n2=n01n2=n01

即:

n0=n2+1 n_0 = n_2 + 1n0=n2+1

✅ 得证。


直观理解

这个性质的本质是:每一个新增的“分叉”(即度为 2 的结点)都会增加一个额外的分支路径,从而最终导致多出一个叶子。根结点开始是一个叶子(单节点树),每增加一个度为 2 的结点,相当于把一个叶子变成内部结点,并生成两个新叶子,净增一个叶子。


http://www.jsqmd.com/news/172359/

相关文章:

  • 2025年末集装箱办公直销大揭秘!口碑厂家榜来袭,集装箱改造/集成房屋设计/集装箱住宿,集装箱办公生产公司有哪些 - 品牌推荐师
  • YOLOv8镜像支持IPv6 DNS解析加速
  • YOLOv8推理时如何处理极端光照条件?
  • YOLOv8 SPPF模块作用机制详解
  • 开通chatgpt-教师计划以及gemini学生套餐
  • YOLOv8实战教程:如何在GPU环境下快速部署目标检测模型
  • YOLOv8推理时如何指定使用哪块GPU?
  • 飞算科技,打破Java开发困局!
  • YOLOv5到YOLOv8迁移指南:开发者必须掌握的升级路径
  • 【预测模型调优终极指南】:基于R语言的7种高效优化策略
  • YOLOv8目标检测实战:如何加载yolov8n.pt预训练权重
  • 找出数组中驻点和拐点
  • Day73(10)-F:\硕士阶段\Java\课程资料\1、黑马程序员Java项目《苍穹外卖》企业级开发实战\sky-take-out
  • five hundred miles
  • 编译错误反复踩坑?这款Java自动修复引擎,本地环境精准适配一次搞定
  • 【R语言时间序列预测优化】:掌握5大核心技巧提升模型精度
  • 【稀缺资源】PHP低代码平台插件开发内部文档流出(仅限前1000人下载)
  • 2026 公众号矩阵跨平台适配 TOP1:广州旗引科技奇码云覆盖全场景 - 品牌推荐官优选
  • YOLOv8在野生动物迁徙研究中的应用
  • YOLOv8训练时数据增强策略分析
  • 2025副业新风口:养一只“机器人”,比养猪还稳?
  • 深度学习框架如何训练 智慧工地 无人机航拍反光衣背心头盔穿戴检测数据集 工地安全施工积水检测数据集 无人机工地积水数据集 无人机建筑施工安全智能化监管 (1)
  • 告别编译错误反复折腾!Java本地环境适配神器,一键搞定不踩坑
  • 代码漏洞藏隐患?Java安全防护神器,分钟级闭环修复
  • 家用电器管理系统厂商哪家强?权威排行来了! - 百誉集团
  • 【R语言随机森林分类实战】:从零构建高精度模型的完整指南
  • YOLOv8在纺织品瑕疵检测中的表现评估
  • AI狂欢,谁在“埋单”?——2025年广告业的底层逻辑
  • 陪诊陪护小程序定制系统,我们这样开发!
  • GLM-4.7编程环境10分钟搭建指南:3种官方配置方法,实测有效,一键即用!