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

【数据结构】树的基本:结点、度、高度与计算

树是数据结构中一种重要的非线性结构,广泛应用于计算机科学的各个领域,例如文件系统、数据库索引、编译器等。理解树的各种性质,如结点数、度、高度等,对于解决实际问题至关重要。

本文将会探讨树的基本概念,以及给出几个王道考研例题和常见公式,不对树的数据结构做出过多原理解释

1. 树的基本概念

  • 结点 (Node): 树中的每个元素称为结点。结点包含数据和指向子结点的指针。
  • 边 (Edge): 连接两个结点的线称为边。
  • 根结点 (Root): 树的顶端结点,没有父结点。
  • 父结点 (Parent): 若一个结点包含指向另一个结点的指针,则称前者为后者的父结点。
  • 子结点 (Child): 若一个结点被另一个结点指向,则称前者为后者的子结点。
  • 兄弟结点 (Sibling): 拥有同一个父结点的结点互称为兄弟结点。
  • 叶结点 (Leaf): 没有子结点的结点称为叶结点。
  • 度 (Degree): 一个结点的子结点个数称为该结点的度。
  • 树的度 (Degree of a Tree): 树中所有结点的度的最大值称为树的度。
  • 路径 (Path): 从一个结点到另一个结点所经过的结点序列称为路径。
  • 路径长度 (Path Length): 路径上边的数量。
  • 层 (Level): 根结点为第 1 层,其子结点为第 2 层,以此类推。
  • 高度 (Height): 从根结点到最远叶子结点的最长路径上的结点数(或边的数量加 1)。
  • 深度 (Depth): 从根结点到该结点的路径长度加 1。

2. 树的重要性质和公式

  1. 结点数与度数的关系: n n n 为树的结点总数, n i n_i ni 表示度为 i i i 的结点个数,则有:

    n = ∑ i = 0 m n i n = \sum_{i=0}^{m} n_i n=i=0mni

    其中 m m m 是树的度。同时,根据每个结点(除根结点外)都恰好有一个父结点,可以得到:

    n = ∑ i = 0 m i ⋅ n i + 1 n = \sum_{i=0}^{m} i \cdot n_i + 1 n=i=0mini+1

    这个公式非常重要,在很多题目中都会用到。

  2. i i i 层最多结点数: 度为 m m m 的树中,第 i i i 层上至多有 m i − 1 m^{i-1} mi1 个结点 ( i ≥ 1 i \ge 1 i1)。这个性质可以通过数学归纳法证明。

  3. 高度为 h h h m m m 叉树最多结点数: 高度为 h h h m m m 叉树至多有 m h − 1 m − 1 \frac{m^h - 1}{m - 1} m1mh1 个结点。当每一层的结点数都达到最大值时,总结点数达到最大。这个公式可以通过等比数列求和公式推导得出:

    1 + m + m 2 + ⋯ + m h − 1 = m h − 1 m − 1 1 + m + m^2 + \cdots + m^{h-1} = \frac{m^h - 1}{m - 1} 1+m+m2++mh1=m1mh1

  4. n n n 个结点的 m m m 叉树最小高度: 度为 m m m、具有 n n n 个结点的树的最小高度 h h h ⌈ log ⁡ m ( n ( m − 1 ) + 1 ) ⌉ \lceil \log_m(n(m-1) + 1) \rceil logm(n(m1)+1)⌉,其中 ⌈ x ⌉ \lceil x \rceil x 表示向上取整。为了使高度最小,应尽可能使每一层的结点数都达到最大值,即形成完全 m m m 叉树。

    推导过程如下:假设前 h − 1 h-1 h1 层都是满的,则前 h − 1 h-1 h1 层的结点数为 m h − 1 − 1 m − 1 \frac{m^{h-1} - 1}{m - 1} m1mh11。加上第 h h h 层的结点,总结点数 n n n 满足:

    m h − 1 − 1 m − 1 < n ≤ m h − 1 m − 1 \frac{m^{h-1} - 1}{m - 1} < n \le \frac{m^h - 1}{m - 1} m1mh11<nm1mh1

    化简不等式,可得最小高度 h h h

  5. n n n 个结点的 m m m 叉树最大高度: 度为 m m m、具有 n n n 个结点的树的最大高度 h h h n − m + 1 n - m + 1 nm+1。为了使高度最大,应尽可能使除少数结点外,其他结点都只有一个子结点,形成“链状”结构。


3. 例题实战

例题 04: 对于一棵具有 n n n 个结点、度为 4 的树来说,()。

A. 树的高度至多是 n − 3 n-3 n3
B. 树的高度至多是 n − 4 n-4 n4
C. 第 i i i 层上至多有 4 ( i − 1 ) 4(i-1) 4(i1) 个结点
D. 至少在某一层上正好有 4 个结点

解析: 根据性质 5,度为 4 的树,其最大高度为 n − 4 + 1 = n − 3 n - 4 + 1 = n - 3 n4+1=n3,故 A 正确。C 选项根据性质 2,第 i i i 层最多有 4 i − 1 4^{i-1} 4i1 个结点,而不是 4 ( i − 1 ) 4(i-1) 4(i1) 个。D 不一定成立,例如只有根结点和四个子结点的树,只有一层有 4 个结点。

答案: A


例题 05: 度为 4、高度为 h h h 的树,()。

A. 至少有 h + 3 h+3 h+3 个结点
B. 至多有 4 h − 1 4h-1 4h1 个结点
C. 至少有 4 h 4h 4h 个结点
D. 至多有 h + 4 h + 4 h+4 个结点

解析: 根据性质 5 的逆推,高度为 h h h、度为 m m m 的树至少有 h + m − 1 h + m - 1 h+m1 个结点,所以度为 4、高度为 h h h 的树至少有 h + 4 − 1 = h + 3 h + 4 - 1 = h + 3 h+41=h+3 个结点,故 A 正确。

答案: A


例题 06: 假定一棵度为 3 的树中,结点数为 50,则其最小高度为 ()。

A. 3
B. 4
C. 5
D. 6

解析: 根据性质 4,最小高度 h = ⌈ log ⁡ 3 ( 50 ( 3 − 1 ) + 1 ) ⌉ = ⌈ log ⁡ 3 ( 101 ) ⌉ h = \lceil \log_3(50(3-1) + 1) \rceil = \lceil \log_3(101) \rceil h=log3(50(31)+1)⌉=log3(101)⌉。因为 3 4 = 81 3^4 = 81 34=81 3 5 = 243 3^5 = 243 35=243,所以 log ⁡ 3 ( 101 ) \log_3(101) log3(101) 介于 4 和 5 之间,向上取整为 5。

答案: C


例题 07: 若森林 F F F 有 15 条边、25 个结点,则 F F F 包含树的个数是( )。

A. 8
B. 9
C. 10
D. 11

解答:
森林的性质:对于一片森林,树的个数 t = n − e t=n−e t=ne,其中 n n n 是结点数, e e e 是边数。
代入数据:

t = 25 − 15 = 10 t=25−15=10 t=2515=10

因此,森林 FF 包含 10 棵树。

答案: C


例题8: 设呀一颗 m m m 叉树中有 N 1 N_1 N1 个度数为 1 1 1 的节点, N 2 N_2 N2 个度数为 2 2 2 的节点 . . . ... ... N m N_m Nm 个度数为 m m m 的节点,则该树中共有( )个叶子节点

A. ∑ i = 1 m ( i − 1 ) N i \sum_{i=1}^m(i-1) N_i i=1m(i1)Ni

B. ∑ i = 1 m N i \sum_{i=1}^m N_i i=1mNi

C. ∑ i = 2 m ( i − 1 ) N i \sum_{i=2}^m(i-1) N_i i=2m(i1)Ni

D. ∑ i = 2 m ( i − 1 ) N i + 1 \sum_{i=2}^m(i-1) N_i+1 i=2m(i1)Ni+1

**答案:**D

解答:

在一颗 m m m 叉树中,除了叶节点之外,每个节点都有一个父节点,因此我们可以利用下面两个等式:

  1. 总节点数 = 叶子节点 + 非叶子节点
  2. 总节点数 = 总度数 + 1 -> 总度数 = 总节点数 - 1

所以,我们假设总节点数为 N N N,叶子节点数为 N 0 N_0 N0,则

  • 总结点数 N = N 0 + N 1 + N 2 + . . . + N m N = N_0 + N_1 + N_2 + ... + Nm N=N0+N1+N2+...+Nm
  • 总度数 = 1 ∗ N 1 + 2 ∗ N 2 + . . . + m ∗ N M 1 * N_1 + 2 * N_2 + ... + m * N_M 1N1+2N2+...+mNM

联立等式

N 0 + N 1 + N 2 + . . . + N m − 1 = 1 ∗ N 1 + 2 ∗ N 2 + 3 ∗ N 3 + . . . + m ∗ N M N_0 + N_1 + N_2 + ... + Nm - 1 = 1 * N_1 + 2 * N_2 + 3 * N_3 + ... + m * N_M N0+N1+N2+...+Nm1=1N1+2N2+3N3+...+mNM

可解的

N 0 = 1 ∗ N 2 + . . . + ( m − 1 ) ∗ N m + 1 N_0 = 1 * N_2 + ... + (m - 1) * N_m + 1 N0=1N2+...+(m1)Nm+1

N 0 = ∑ m = 2 m ( m − 1 ) N m + 1 N_0 = \sum_{m=2}^m(m - 1)N_m + 1 N0=m=2m(m1)Nm+1


例题9:【2010 统考真题】在一棵度为 4 的树 T T T 中,若有 20 个度为 4 的结点, 10 个度为 3 的结点, 1 个度为 2 的结点, 10 个度为 1 的结点,则树 T T T 的叶结点个数是( )。
A. 41
B. 82
C. 113
D. 122

答案: B

解答:

这个问题是问题 08 的一个具体应用。已知了每个度数的结点数量,我们可以直接套用问题 08 中推导出的公式。

根据问题 08 的公式:

N 0 = ∑ i = 2 m ( i − 1 ) N i + 1 N_0=\sum_{i=2}^m(i-1) N_i+1 N0=i=2m(i1)Ni+1

在问题 09 中, m = 4 , N 1 = 10 , N 2 = 1 , N 3 = 10 , N 4 = 20 m=4, ~ N_1=10, N_2=1, N_3=10, N_4=20 m=4, N1=10,N2=1,N3=10,N4=20 。将这些直代入公式:

N 0 = ( 2 − 1 ) ∗ N 2 + ( 3 − 1 ) ∗ N 3 + ( 4 − 1 ) ∗ N 4 + 1 N 0 = ( 1 ) ∗ 1 + ( 2 ) ∗ 10 + ( 3 ) ∗ 20 + 1 N 0 = 1 + 20 + 60 + 1 N 0 = 82 \begin{aligned} & N_0=(2-1) * N_2+(3-1) * N_3+(4-1) * N_4+1 \\ & N_0=(1) * 1+(2) * 10+(3) * 20+1 \\ & N_0=1+20+60+1 \\ & N_0=82 \end{aligned} N0=(21)N2+(31)N3+(41)N4+1N0=(1)1+(2)10+(3)20+1N0=1+20+60+1N0=82

6. 关键点总结

  • 结点数与度数的关系: n = ∑ i = 0 m i ⋅ n i + 1 n = \sum_{i=0}^{m} i \cdot n_i + 1 n=i=0mini+1
  • i i i 层最多结点数: m i − 1 m^{i-1} mi1
  • 高度为 h h h m m m 叉树最多结点数: m h − 1 m − 1 \frac{m^h - 1}{m - 1} m1mh1
  • n n n 个结点的 m m m 叉树最小高度: ⌈ log ⁡ m ( n ( m − 1 ) + 1 ) ⌉ \lceil \log_m(n(m-1) + 1) \rceil logm(n(m1)+1)⌉
  • n n n 个结点的 m m m 叉树最大高度: n − m + 1 n - m + 1 nm+1
  • 对于一片森林,树的个数 t = n − e t=n−e t=ne,其中 n n n 是结点数, e e e 是边数

相关文章:

【数据结构】树的基本:结点、度、高度与计算

树是数据结构中一种重要的非线性结构&#xff0c;广泛应用于计算机科学的各个领域&#xff0c;例如文件系统、数据库索引、编译器等。理解树的各种性质&#xff0c;如结点数、度、高度等&#xff0c;对于解决实际问题至关重要。 本文将会探讨树的基本概念&#xff0c;以及给出几…...

【Pytest】生成html报告中,中文乱码问题解决方案

链接上一篇文章:https://blog.csdn.net/u013080870/article/details/145369926?spm1001.2014.3001.5502 中文乱码问题&#xff0c;python3&#xff0c;Python3.7后&#xff0c;还一个文件就是result.py 因为中文可以在内容中&#xff0c;也可能在文件名&#xff0c;类名&…...

week08_文本匹配任务

1、文本匹配任务概述 狭义&#xff1a; 给定一组文本&#xff0c;判断其是否语义相似 今天天气不错 match 今儿个天不错呀 √ 今天天气不错 match 你的代码有bug 以分值形式给出相似度 今天天气不错 match 今儿个天不错呀 0.9 今天天气不错 match…...

JUC--ConcurrentHashMap底层原理

ConcurrentHashMap底层原理 ConcurrentHashMapJDK1.7底层结构线程安全底层具体实现 JDK1.8底层结构线程安全底层具体实现 总结JDK 1.7 和 JDK 1.8实现有什么不同&#xff1f;ConcurrentHashMap 中的 CAS 应用 ConcurrentHashMap ConcurrentHashMap 是一种线程安全的高效Map集合…...

【2024年华为OD机试】(C卷,200分)- 推荐多样性 (JavaScriptJava PythonC/C++)

一、问题描述 问题描述 我们需要从多个已排序的列表中选取元素,以填充多个窗口。每个窗口需要展示一定数量的元素,且元素的选择需要遵循特定的穿插策略。具体来说,我们需要: 从第一个列表中为每个窗口选择一个元素,然后从第二个列表中为每个窗口选择一个元素,依此类推。…...

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…...

[权限提升] 操作系统权限介绍

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 权限提升简称提权&#xff0c;顾名思义就是提升自己在目标系统中的权限。现在的操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;我们通过 Web 漏洞拿到的 Web 进程的…...

DeepSeek异军突起,重塑AI格局

DeepSeek异军突起&#xff0c;重塑AI格局这两天AI 圈发生了比过年更令人兴奋的事情&#xff0c;“Meta内部反水事件”、“黄仁勋的底盘问题”&#xff0c;以及AI格局的大动荡&#xff0c;一切都是因为那个叫DeepSeek的“中国自主AI”&#xff01;它由幻方量化开发&#xff0c;以…...

git的理解与使用

本地的git git除了最经典的add commit push用来做版本管理&#xff0c;其实他的分支管理也非常强大 可以说你学好了分支管理&#xff0c;就可以完成团队的配合协作了 git仓库 我们可以使用git init来初始化一个git仓库&#xff0c;只要能看见.git文件夹&#xff0c;就代表这…...

Baklib打造内容中台新模式助力企业智能化升级

内容概要 在如今数字化日渐渗透各个行业的背景下&#xff0c;内容中台逐渐成为推动企业智能化转型的重要工具。内容中台不仅仅是一个信息管理平台&#xff0c;更是一个整合多种内容资源&#xff0c;提升企业反应能力与市场适应力的创新模式。随着数据量的激增&#xff0c;传统…...

STM32完全学习——RT-thread在STM32F407上移植

一、写在前面 关于源码的下载&#xff0c;以及在KEIL工程里面添加操作系统的源代码&#xff0c;这里就不再赘述了。需要注意的是RT-thread默认里面是会使用串口的&#xff0c;因此需要额外的进行串口的初始化&#xff0c;有些人可能会问&#xff0c;为什么不直接使用CubMAX直接…...

基于51单片机和ESP8266(01S)、LCD1602、DS1302、独立按键的WiFi时钟

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、延时2、定时器03、串口通信4、DS13025、LCD16026、独立按键 四、主函数总结 系列文章目录 前言 之前做了一个WiFi定时器时钟&#xff0c;用八位数码管进行显示&#xff0c;但是定时器时钟的精度较低&#xff0…...

启元世界(Inspir.ai)技术浅析(二):深度强化学习

深度强化学习(Deep Reinforcement Learning, DRL)是启元世界在人工智能领域的一项核心技术,广泛应用于游戏AI、智能决策等领域。 一、状态(State) 1.1 概念与作用 **状态(State)**是指智能体对环境的感知,是智能体进行决策的基础。在深度强化学习中,状态通常是一个高…...

LeetCode100之子集(78)--Java

1.问题描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例1 输入&#xff1a;nums [1,2,3]输出&#xff1a;[[],[1],[2],[1,2],[3],[1…...

React第二十五章(受控组件/非受控组件)

React 受控组件理解和应用 React 受控组件 受控组件一般是指表单元素&#xff0c;表单的数据由React的 State 管理&#xff0c;更新数据时&#xff0c;需要手动调用setState()方法&#xff0c;更新数据。因为React没有类似于Vue的v-model&#xff0c;所以需要自己实现绑定事件…...

使用 Confluent Cloud 的 Elasticsearch Connector 部署 Elastic Agent

作者&#xff1a;来自 Elastic Nima Rezainia Confluent Cloud 用户现在可以使用更新后的 Elasticsearch Sink Connector 与 Elastic Agent 和 Elastic Integrations 来实现完全托管且高度可扩展的数据提取架构。 Elastic 和 Confluent 是关键的技术合作伙伴&#xff0c;我们很…...

嵌入式知识点总结 Linux驱动 (三)-文件系统

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.什么是文件系统&#xff1f; 2.根文件系统为什么这么重要&#xff1f;​编辑 3.可执行映像文件通常由几部分构成&#xff0c;他们有什么特点&#xff1f; 1.什么是文件系统&a…...

【知识】可视化理解git中的cherry-pick、merge、rebase

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 这三个确实非常像&#xff0c;以至于对于初学者来说比较难理解。 总结对比 先给出对比&#xff1a; 特性git mergegit rebasegit cherry-pick功能合并…...

【deepseek】deepseek-r1本地部署-第二步:huggingface.co替换为hf-mirror.com国内镜像

一、背景 由于国际镜像国内无法直接访问&#xff0c;会导致搜索模型时加载失败&#xff0c;如下&#xff1a; 因此需将国际地址替换为国内镜像地址。 二、操作 1、使用vscode打开下载路径 2、全局地址替换 关键字 huggingface.co 替换为 hf-mirror.com 注意&#xff1a;务…...

新站如何快速获得搜索引擎收录?

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/8.html 新站想要快速获得搜索引擎收录&#xff0c;需要采取一系列有针对性的策略。以下是一些具体的建议&#xff1a; 一、网站内容优化 高质量原创内容&#xff1a; 确保网站内容原创、…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...