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

数据结构:严格二叉树 (Strict Binary Tree)

目录

什么是严格二叉树?(Definition)

重要术语说明

严格二叉树的高度 vs 节点数

已知高度 h,节点数 n 的范围

严格二叉树的内部节点 vs 外部节点

推导方法一:利用通用性质

推导方法二:从零开始的归纳法


这次我们来探讨一种特殊的、结构更规整的二叉树——严格二叉树 (Strict Binary Tree)。它的性质非常优美和确定,是很多算法(比如哈夫曼编码树)的基础。

什么是严格二叉树?(Definition)

我们从二叉树的通用定义出发进行第一性推导。

  • 通用二叉树: 一个节点可以有 0 个、1 个或 2 个子节点。

  • 这种定义非常灵活,但也带来不确定性。其中最“不规整”的情况就是一个节点只有1个子节点。如果我们想让树的结构更“对称”或“确定”,最直接的方法就是去掉这种中间状态。

  • 推导出的新规则: 我们不允许节点有1个子节点。那么,一个节点只剩下两种可能:

    1. 它没有子节点(成为叶子节点)。

    2. 它有2个子节点。

一个严格二叉树 (Strict Binary Tree) 是指树中的每一个节点要么是叶子节点(度为0),要么拥有两个子节点(度为2)。不存在度为1的节点。

重要术语说明

这个概念在不同的书籍里有不同的叫法,很容易混淆,这里特别为你澄清:

  • Strict Binary Tree (严格二叉树): 我们今天讨论的主角。

  • Proper Binary Tree2-tree: 也是指严格二叉树。

  • Full Binary Tree: 在很多经典的英文教材(如《算法导论》)中,"Full Binary Tree" 就是指严格二叉tree。

  • 但是,在国内很多教材中,"满二叉树" 指的是一种更完美的树——完美二叉树 (Perfect Binary Tree),即所有叶子都在同一层且所有非叶子节点都有2个孩子。

  • 为了避免混淆,我将统一使用“严格二叉树”这个最准确的术语。


严格二叉树的高度 vs 节点数

现在,我们在“严格”这个新约束下,重新审视高度和节点数的关系。

已知高度 h,节点数 n 的范围

A. 最大节点数 n_max

                ●/     \●         ●/   \     /   \●      ●  ●       ●/ \    / \ / \    / \●  ●  ●   ● ●  ●  ●   ●

第一性原理: 要想在高度为 h 的限制下容纳最多节点,我们依然要把所有位置都填满。

  • 一个把所有位置都填满的树(完美二叉树),其所有内部节点的度都为2,所有叶子节点都在最底层。它天然就满足“严格二叉树”的定义。

  • 因此,严格二叉树的最大节点数和普通二叉树的完全一样。

B. 最小节点数 n_min

第一性原理: 在必须达到高度 h 的前提下,使用最少的节点,并且还要遵守“要么0个孩子,要么2个孩子”的规则。

    ●/ \●   ●
    ●/ \●   ●/ \
●   ●
  • 推导:

    • h=0:   只有1个根节点。它是叶子。n=1。

    • h=1:   为了达到高度1,根节点必须有孩子。根据严格定义,它不能有1个,必须有2个。这两个孩子都是叶子。所以节点数 = 1(根) + 2(孩子) = 3。

    • h=2:   为了达到高度2,我们必须在高度为1的“最瘦”严格树(3个节点)的基础上,让其中一个叶子节点“生”出孩子。

    • 我们选择一个叶子(比如左孩子),让它长出2个子节点(它们成为新的叶子)。

      • 节点数 = 1(根) + 2(第一层) + 2(第二层) = 5。

    • 发现规律: 我们发现,要让高度增加1,我们必须选择一个最深层的叶子节点,把它变成一个内部节点,并给它分配2个新的叶子节点。这个过程让总节点数增加了2。

    • 这个过程形成了一个等差数列:1, 3, 5, 7, ...

    • 其通项公式为:

结论: 高度为 h 的严格二叉树,最少有 2h+1 个节点。


严格二叉树的内部节点 vs 外部节点

这是一个非常优美的性质,也是严格二叉树最重要的特性之一。

  • 内部节点 (Internal Node): 非叶子节点。在严格二叉树中,就是指那些有2个子节点的节点。

  • 外部节点 (External Node): 叶子节点。

我们来寻找二者数量上的关系。设 I 为内部节点数,E 为外部节点(叶子)数。

推导方法一:利用通用性质

  1. 我们在之前的文章中推导过一个适用于所有二叉树的普适公式:n_0 = n_2 + 1。

    • n_0 是度为0的节点数(叶子节点)。

    • n_2 是度为2的节点数。

  2. 现在我们把这个公式应用到严格二叉树的场景中:

    • 根据定义,外部节点 E 就是叶子节点,所以 E=n_0。

    • 根据定义,内部节点 I 就是那些度为2的节点,所以 I=n_2。

    • 严格二叉树中没有度为1的节点,即 n_1=0。

  3. 将 E 和 I 代入通用公式 n_0=n_2+1,直接得到:E = I + 1


推导方法二:从零开始的归纳法

这种方法更直观,能让你“看到”这个关系是如何形成的。

  1. 基础情况: 最小的非空严格二叉树是什么?是一个单独的根节点。

    • 此时,它是一个叶子节点。

    • 内部节点数 I=0。

    • 外部节点数 E=1。

    • 关系 E=I+1 成立 (1=0+1)。

  2. 生长过程: 如何从一棵严格二叉树得到一棵更大的严格二叉树?

    ●(I)/   \●(E)  ●(E)

我们必须选择一个外部节点(叶子),然后给它加上两个子节点。

    ●(I)/   \●(I)  ●(E)/ \
●(E) ●(E)

这个操作会带来什么变化?

  • 被选中的那个外部节点,不再是叶子了,它变成了内部节点

    • 所以 E 的数量减 1。

    • 所以 I 的数量加 1。

  • 它新长出的两个子节点,成为了新的外部节点(叶子)。

    • 所以 E 的数量再加 2。

  • 我们来计算一下 EI 的净变化量:

    • I 的净变化: +1。

    • E 的净变化: −1 + 2 =+ 1。

再生长一次(选择右边的叶子):

    ●(I)/   \●(I)  ●(I)/ \   / \
●(E)●(E)●(E)●(E)

变化分析:

  • I: 2 → 3(+1)

  • E: 3 → 4(-1 + 2 = +1)

  • N: 5 → 7(+2)

  • 关系 E = I + 1 继续成立 ✅

归纳结论: 我们从一个满足 E = I + 1 的基础状态开始,每一步生长操作,都同时给 EI 增加1。

这意味着,无论这棵树如何生长,它们之间的差值将永远保持不变。

  • E_new = E_old + 1

  • I_new = I_old + 1

  • 因此,E_new − I_new = (E_old + 1) − (I_old + 1) = E_old − I_old = 1。

  • 这个关系 E = I + 1 永远成立。

一个有趣的推论:

树的总节点数 N = I + E。 将 E = I + 1 代入,得 N = I + ( I + 1) = 2I + 1 。 这意味着,任何非空严格二叉树的总节点数永远是奇数。

http://www.xdnf.cn/news/18042.html

相关文章:

  • PyTorch的安装-CPU版本或者GPU安装有什么区别吗
  • Unity_导航网格
  • 我的第一个音乐元素浏览项目上传至Github啦!
  • MyBatis 与 MyBatis-Plus 的区别
  • STM32L051同时处理Alarm A和Alarm B中断
  • SSH协议的GIT转换
  • 系统介绍pca主成分分析算法
  • flutter开发(二)检测媒体中的静音
  • Day59--图论--47. 参加科学大会(卡码网),94. 城市间货物运输 I(卡码网)
  • 【DDIA】第二部分:分布式数据
  • 应用层协议——HTTP
  • 抽奖程序web程序
  • JavaScript 基础实战:DOM 操作、数据类型与常见需求实现
  • 项目管理工具
  • NPM 、 NPX
  • 清除 pnpm 缓存,解决不同源安装依赖包失败的问题
  • electron之win/mac通知免打扰
  • 【R语言】R 语言中 gsub 与正则表达式详解(含 POSIX 与 Perl 风格实例)
  • 汽车电子:现代汽车的智能核心
  • [激光原理与应用-287]:理论 - 波动光学 - 电磁波既能承载能量,又能承载信息?
  • 【软件设计模式】前置知识类图、七大原则(精简笔记版)
  • Spark 运行流程核心组件(二)任务调度
  • EN/IEC 55015 照明设备的电磁兼容标准安全
  • Docker Compose部署Clickhouse最新版
  • 【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器
  • 为什么游戏会出现“卡顿”:`clock.tick()` v.s. `clock.get_fps()`
  • 【uni-app】根据角色/身份切换显示不同的 自定义 tabbar
  • 线性代数 · 直观理解矩阵 | 空间变换 / 特征值 / 特征向量
  • CERT/CC警告:新型HTTP/2漏洞“MadeYouReset“恐致全球服务器遭DDoS攻击瘫痪
  • 机械加工元件——工业精密制造的璀璨明珠