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

数据结构:满二叉树 (Full Binary Tree) 和 完全二叉树 (Complete Binary Tree)

目录

重要的术语澄清

完美二叉树 (Perfect Binary Tree)

完全二叉树 (Complete Binary Tree)

大比拼 (Comparison)

相互关系的第一性推导 


我们来深入探讨两种在算法中非常重要的、具有特定“形状”的二叉树:满二叉树 (Full Binary Tree) 和 完全二叉树 (Complete Binary Tree)。

最关键的是,我们会将它们与之前学过的严格二叉树 (Strict Binary Tree) 进行详细的比较。

数据结构:严格二叉树 (Strict Binary Tree)-CSDN博客

这三者之间的区别和联系是常考点,也是一个非常容易混淆的地方,所以这次的第一性推导会特别注重辨析。


重要的术语澄清

在开始之前,我必须先解决一个长期困扰学习者的问题:术语混乱。

  1. Strict Binary Tree (严格二叉树): 我们已经学过,定义非常清晰——每个节点要么有0个孩子,要么有2个孩子。

  2. Full Binary Tree: 这是最混乱的术语。

    • 在很多国际经典教材(如《算法导论》)和学术界中,"Full Binary Tree" 就是我们学的 "Strict Binary Tree"。

    • 但是,在中国国内的很多教材中,“满二叉树” 指的是一种结构最完美的树,即所有叶子都在同一层。为了避免这种语义混淆,我们把这种最完美的树称为 完美二叉树 (Perfect Binary Tree)

  3. Complete Binary Tree (完全二叉树): 这个术语的定义是统一的,没有争议。

为了本次学习的清晰性,我们将采用以下定义:

  • 严格二叉树 (Strict Binary Tree): 度为0或2。

  • 完美二叉树 (Perfect Binary Tree): 国内教材中的“满二叉树”,是一种极致形态。

  • 完全二叉树 (Complete Binary Tree): 为数组表示法而生的结构。


完美二叉树 (Perfect Binary Tree)

让我们从一个问题开始——一棵二叉树最“完美”、最“饱满”、最“对称”的形态应该是什么样的?

推导1 ——饱满:要想“饱满”,内部就不应该有任何浪费的空间。

任何一个非叶子节点,如果只挂了一个孩子,那它的另一个孩子位就空着,这不“饱满”。

所以,所有非叶子节点都必须有两个孩子。(这恰好是严格二叉树的定义)。

推导2 ——对称: 要想“对称”,树的末端应该是整齐划一的。

如果有些叶子在第3层,有些在第4层,那这棵树看起来就像参差不齐的灌木,不够“完美”。

所以,所有的叶子节点必须在同一层

h = 2  (高度 2)●/ \●   ●/ \ / \●  ● ●  ●

将这两个推论合二为一,就得到了完美二叉树 (Perfect Binary Tree) 的定义:

一棵深度为 k 且有 2^(k + 1) − 1 个节点的二叉树。用更直观的语言描述就是:

  1. 它是一棵严格二叉树。

  2. 并且,它所有的叶子节点都在最下面一层。

这棵树的形状像一个完美的等腰三角形,没有任何空缺。

性质:

  • 节点数与高度的关系是固定的:对于高度为 h 的完美二叉树,其节点数 n 永远是它能达到的最大值,不多不少,即 n = 2^(h + 1) − 1。

  • 它是严格二叉树的一种非常特殊的特例。


完全二叉树 (Complete Binary Tree)

完美二叉树的要求太苛刻了。如果我有6个节点,就无法构成一棵完美二叉树(高度为1的完美树有3个节点,高度为2的有7个)。

那么,在节点数不“完美”的情况下,如何让树的形态尽可能地紧凑、不浪费空间呢?

推导1 ——填充顺序: 要想紧凑,我们应该从上到下,一层一层地去填充节点。不能第2层还没满,就去放第3层的节点。

所以,树的所有层,除了最后一层,都必须是满的(即构成一个完美二叉树)。

推导2 ——最后一层的排列: 对于最后一层,节点可能没有填满。那这些节点应该怎么放?是随便放,还是靠右放,还是靠左放?

为了“紧凑”,最自然的方式就是从左到右依次排列,中间不能有空隙。

满二叉树 (高度 2):●/ \●   ●/ \ / \●  ● ●  ●完全二叉树(去掉最右叶子):●/ \●   ●/ \ / ●  ● ●

将这两个推论合二为一,就得到了完全二叉树 (Complete Binary Tree) 的定义:

一棵二叉树,如果它除了最底层之外的其他各层都被完全填满,并且最底层的所有节点都连续地集中在左边,那么它就是一棵完全二叉树。

这个“从上到下,从左到右,连续排列”的特性,使其与数组表示法完美契合!

数据结构:二叉树的表示方式(Representation of Binary Trees)-CSDN博客

当你按层序遍历一个完全二叉树时,得到的节点序列可以不多不少、不留一个空位地(没有-1作为占位符)存入一个数组中。

完全二叉树这个概念,可以说就是为了高效的数组表示法而生的。 这是理解它的关键。


大比拼 (Comparison)

现在我们把三个概念放在一起,从不同维度进行比较。

对比维度严格二叉树 (Strict)完美二叉树 (Perfect)完全二叉树 (Complete)
一句话定义节点度数要么是0,要么是2节点全满,叶子在同一层节点按层序连续排列
允许的节点度只有 0 和 2只有 0 和 2可以是 0, 1, 2<br>(最多只允许有一个度为1的节点)
形状要求无特定形状要求,可高可矮必须是完美的金字塔形必须是“左对齐”的紧凑形状
和别人的关系是一个比较宽泛的分类是严格二叉树的特例<br>是完全二叉树的特例不一定是严格二叉树<br>(当节点总数为偶数时,必有1个度为1的节点)
数组表示法如果很“瘦”,会浪费巨大空间空间利用率100%,没有浪费空间利用率100%,完美适配

相互关系的第一性推导 

我们可以把这些树的集合想象成几个圈:

1. 完美二叉树是标准最严苛的。它既要求所有内部节点度为2(满足严格定义),又要求节点是连续的(满足完全定义)。

所以,完美二叉树的圈是最小的,它同时位于严格树和完全树两个圈的交集之内。

  • 完美 => 严格 (成立)

  • 完美 => 完全 (成立)

完美二叉树: ●/     \●         ●/   \     /   \●     ●   ●     ●/ \   / \ / \   / \●  ●  ●  ● ● ●  ●  ●

2. 严格二叉树只对节点的“度”有要求。它不关心节点是不是“左对齐”。你可以构造一棵严格二叉树,它中间有空位,因此它不是完全二叉树。

  • 严格 => 完全 (不成立)

严格二叉树:●/   \●      ●/   \●     ●/ \   / \●   ● ●   ●

3. 完全二叉树只对节点的“位置”有要求。它不关心节点的“度”。当节点总数是偶数时,必然会产生一个只有一个左孩子的节点,它的度是1,这就不满足严格二叉树的定义。

  • 完全 => 严格 (不成立)

完全二叉树:●/     \●         ●/   \     /   \●     ●   ●     ●/ \   / ●  ●  ●  

结论:

  • 完美二叉树 是最特殊、最规整的,它同时是一棵严格二叉树和一棵完全二叉树。

  • 严格二叉树 和 完全二叉树 是从两个不同维度(“度” vs “位置”)对树进行的约束,它们有交集(交集就是完美二叉树),但谁也不是谁的子集。

理解了这些从基本原则出发的定义和它们之间的逻辑关系,你就再也不会把这几个概念搞混了。

http://www.lryc.cn/news/622722.html

相关文章:

  • 无痕HOOK 检测及对抗
  • 数据结构:构建 (create) 一个二叉树
  • OpenJDK 17的C1和C2编译器实现中,方法返回前插入安全点(Safepoint Poll)的机制
  • 【lubancat】鲁班猫4实现开机后自动播放视频
  • 攻击者如何毒害人工智能工具和防御系统
  • 罗技MX Anywhere 2S鼠标修复记录
  • 【攻防实战】红队攻防之Goby反杀
  • 云原生俱乐部-RH124知识点总结(1)
  • PHP反序列化的CTF题目环境和做题复现第2集_POP链构造
  • 布隆过滤器的原理及使用
  • 基于STM32的智能书房系统设计与实现
  • 从阿里一面真题看:索引树搜索次数背后的逻辑
  • Sklearn 机器学习 邮件文本分类 加载邮件数据
  • 防御保护16
  • Redis集群设计实战:从90%缓存命中率看高并发系统优化
  • Rust 语法基础教程
  • AI应用安全 - Prompt注入攻击
  • [1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
  • 【LeetCode题解】LeetCode 35. 搜索插入位置
  • Dify实战应用指南(上传需求稿生成测试用例)
  • Jenkins常见问题及解决方法
  • STM32 延时函数详解
  • 343整数拆分
  • 后量子密码算法ML-DSA介绍及开源代码实现
  • 【Qt开发】常用控件(四)
  • 算法提升之树上问题-(tarjan求LCA)
  • 基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
  • MySQL 配置性能优化赛技术文章
  • Win10、Win11电脑之间无法Ping通解决办法
  • 设计模式之【快速通道模式】,享受VIP的待遇