当前位置: 首页 > 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; 确保网站内容原创、…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

拟合问题处理

在机器学习中&#xff0c;核心任务通常围绕模型训练和性能提升展开&#xff0c;但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正&#xff1a; 一、机器学习的核心任务框架 机…...

Ansible+Zabbix-agent2快速实现对多主机监控

ansible Ansible 是一款开源的自动化工具&#xff0c;用于配置管理&#xff08;Configuration Management&#xff09;、应用部署&#xff08;Application Deployment&#xff09;、任务自动化&#xff08;Task Automation&#xff09;和编排&#xff08;Orchestration&#xf…...