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

树和二叉树知识点大全及相关题目练习【数据结构】

树和二叉树

要注意树和二叉树是两个完全不同的结构、概念,它们之间不存在包含之类的关系
在这里插入图片描述

树的定义

树(Tree)是n(n≥0)个结点的有限集,它或为空树(n = 0);或为非空树,对于非空树T:
(1)有且仅有一个称之为根的结点;
(2)除根结点以外的其余结点可分为m(m>0)个互不相交的有限集T1, T2, …, Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
显然,树的定义是一个递归的定义

树的基本术语

根:即根结点(没有前驱)
叶子:即终端结点(没有后继)
森林:指m棵不相交的树的集合(例如删除A后的子树个数)
有序树:结点各子树从左至右有序,不能互换(左为第一)
无序树:结点各子树可互换位置
双亲:即上层的那个结点(直接前驱)
孩子: 即下层结点的子树的根(直接后继)
兄弟:同一双亲下的同层结点(孩子之间互称兄弟)
堂兄弟:即双亲位于同一层的结点(但并非同一双亲)
祖先:即从根到该结点所经分支的所有结点
子孙:即该结点下层子树中的任一结点
结点:即树的数据元素
结点的度:结点挂接的子树数
结点的层次:从根到该结点的层数(根结点算第一层)
终端结点:即度为0的结点,即叶子
分支结点:即度不为0的结点(也称为内部结点)
树的度:所有结点度中的最大值
树的深度(或高度):指所有结点中最大的层数

二叉树的定义

二叉树(Binary Tree)是n(n≥0)个结点所构成的集合,它或为空树(n = 0);或为非空树,对于非空树T:
(1)有且仅有一个称之为根的结点;
(2)除根结点以外的其余结点分为两个互不相交的子集T1和T2,分别称为T的左子树和右子树,且T1和T2本身又都是二叉树。
所有树都可以转为唯一对应的二叉树,不失一般性,任何树都可以与二叉树相互转换。
二叉树不是树的特殊情况,它们是两个概念

二叉树的特点

1、每个结点最多有两孩子(二叉树中不存在度大于2的结点)
2、子树有左右之分,其次序不能颠倒
3、二叉树可以是空集合,根可以有空的左子树或空的右子树
二叉树的五种基本形态:
在这里插入图片描述
(虽然二叉树与树概念不同,但有关树的基本术语对二叉树都适用)

二叉树的性质

性质一
在这里插入图片描述
第i层上至少有1个结点
性质二
在这里插入图片描述
深度为k时至少有k个结点

性质三
以n(0)表示度为0的结点的个数,以n(1)表示度为1的结点的个数,以n(2)表示度为2的结点个数
n(0)=n(2)+1
推导:
设一棵二叉树总结点个数为n,则从下往上看,每一个结点都有一条边和它的双亲结点相连(有且只有一条),头结点除外,因为他没有双亲结点,则这棵二叉树总共有n-1条边
又因为度为2的结点n(2)会生出两条边,度为1的结点n(1)会生出一条边,度为0的结点没有边,因此n-1=2* n(2)+1* n(1)
又因为总结点个数n=度为二的结点个数n(2)+度为一的结点个数n(1)+度为零的结点个数n(0)
n=n(2)+n(1)+n(0)
n-1=2 * n(2)+1 * n(1)
合并整理得n(0)=n(2)+1
在这里插入图片描述

两种特殊形式的二叉树

在这里插入图片描述
在这里插入图片描述
满二叉树在同样深度的二叉树中结点个数最多
满二叉树在同样深度的二叉树中叶子结点个数最多

在这里插入图片描述
在这里插入图片描述
在满二叉树中,从最后一个结点开始,连续去掉任意个结点,即是一颗完全二叉树
满二叉树一定是完全二叉树
完全二叉树不一定是满二叉树

相关题目练习

  1. (判断题)二叉树中每个结点的度不能超过2,所以二叉树是一种特殊的树。
    A. 对
    B. 错
    正确答案: 错
    二叉树和树完全是两个概念,两个东西,二叉树不是树的特例
  2. (判断题)哈夫曼树的总结点个数(多于1时)不能为偶数。
    A. 对
    B. 错
    正确答案: 对
    哈夫曼编码树中没有度为1的结点。若叶子结点的个数为n,则哈夫曼编码树的结点总数为 2n-1,因此总结点个数(多于1时)不能为偶数
  3. (判断题)由二叉树的先序序列和后序序列可以唯一确定一颗二叉树。
    A. 对
    B. 错
    正确答案: 错
    哈夫曼树一定是完全二叉树。
    A. 对
    B. 错
    正确答案: 错
  4. (判断题)满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
    A. 对
    B. 错
    正确答案: 对
  5. (判断题)设一棵树T可以转化成二叉树BT,则二叉树BT中一定没有右子树。
    A. 对
    B. 错
    正确答案: 对
  6. (判断题)哈夫曼树中没有度数为1的结点。
    A. 对
    B. 错
    正确答案: 对
  7. (判断题)先序遍历一棵二叉排序树得到的结点序列不一定是有序的序列。
    A. 对
    B. 错
    正确答案: 对
  8. (判断题)中序遍历二叉排序树可以得到一个有序的序列。
    A. 对
    B. 错
    正确答案: 对
  9. (选择题)具有60个结点的二叉树,其叶子结点有12个,则度为1的结点数为( )。
    A. 11
    B. 13
    C. 48
    D. 37
    正确答案: D:37
  10. (选择题)Huffman树的带权路径长度WPL等于( )。
    A. 除根结点之外的所有结点权值之和
    B. 所有结点权值之和
    C. 各叶子结点的带权路径长度之和
    D. 根结点的值
    正确答案: C:各叶子结点的带权路径长度之和
  11. (选择题)在一棵二叉树上第4层的结点数最多为( )。
    A. 2
    B. 4
    C. 6
    D. 8
    正确答案: D
  12. (选择题)用顺序存储的方法将完全二叉树中的所有结点逐层存放在数组中R[1…n],结点R[i]若有左孩子,其左孩子的编号为结点( )。
    A. R[2i+1]
    B. R[2i]
    C. R[i/2]
    D. R[2i-1]
    正确答案: B
  13. (选择题)由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为( )。
    A. 24
    B. 48
    C. 72
    D. 53
    正确答案: D:53
  14. (选择题)如果F是由有序树T转换而来的二叉树,那么T中结点的前序就是F中结点的( )。
    A. 中序
    B. 前序
    C. 后序
    D. 层次序
    正确答案: B:前序
  15. (选择题)欲实现任意二叉树的后序遍历的非递归算法而不必使用栈,最佳方案是二叉树采用( )存储结构。
    A. 三叉链表
    B. 广义表
    C. 二叉链表
    D. 顺序
    正确答案: A
  16. (选择题)任何一棵二叉树的叶子结点在先序、中序和后序遍历序列中的相对次序( )。
    A. 不发生改变
    B. 发生改变
    C. 不能确定
    D. 以上都不对
    正确答案: A
  17. (选择题)根据二叉树的定义可知二叉树共有( )种不同的形态。
    A. 4
    B. 5
    C. 6
    D. 7
    正确答案: B
    在这里插入图片描述
  18. (选择题)设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有( )个空指针域。
    A. 2m-1
    B. 2m
    C. 2m+1
    D. 4m
    正确答案: B
  19. (选择题)设某棵二叉树中有2000个结点,则该二叉树的最小高度为( )。
    A. 9
    B. 10
    C. 11
    D. 12
    正确答案: C
  20. (选择题)设一棵m叉树中度数为0的结点数为N0,度数为1的结点数为Nl,……,度数为m的结点数为Nm,则N0=( )。
    A. Nl+N2+……+Nm
    B. l+N2+2N3+3N4+……+(m-1)Nm
    C. N2+2N3+3N4+……+(m-1)Nm
    D. 2Nl+3N2+……+(m+1)Nm
    正确答案: B
    在这里插入图片描述
    在这里插入图片描述

相关文章:

树和二叉树知识点大全及相关题目练习【数据结构】

树和二叉树 要注意树和二叉树是两个完全不同的结构、概念,它们之间不存在包含之类的关系 树的定义 树(Tree)是n(n≥0)个结点的有限集,它或为空树(n 0);或为非空树&a…...

ajax的原理,使用场景以及如何实现

AJAX 原理 AJAX(Asynchronous JavaScript and XML)是一种在网页中实现异步通信的技术,允许网页在不重新加载整个页面的情况下与服务器交换数据。这使得网页应用可以更加响应式和动态,提升用户体验。 AJAX 的核心原理是在后台通过…...

lock_guard和unique_lock学习总结

1.std::lock_guard std::lock_guard其实就是简单的RAII(Resource Acquisition Is Initialization)封装,资源获取即初始化。在构造函数中进行加锁,析构函数中进行解锁,这样可以保证函数退出时,锁一定被释放…...

数据挖掘-padans初步使用

目录标题 Jupyter Notebook安装启动 Pandas快速入门查看数据验证数据建立索引数据选取⚠️注意:排序分组聚合数据转换增加列绘图line 或 **(默认):绘制折线图。bar:绘制条形图。barh:绘制水平条形图。hist&…...

小阿轩yx-案例:项目发布基础

小阿轩yx-案例:项目发布基础 前言 随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。Jenkins 自动化部署可以解决集成、测试、部署等重复性的工作,工具集…...

【HarmonyOS】时间处理Dayjs

背景 在项目中经常会使用要时间的格式转换,比如数据库返回一个Date数据,你需要转成2024-10-2的格式,鸿蒙的原生SDK中是没有办法实现的,因此,在这里介绍第三方封装好并且成熟使用的库Dayjs。 安装 切换到Entry文件夹下…...

论React Native 和 UniApp 的区别

1. 开发语言与框架 React Native: 使用 JavaScript 和 React 框架进行开发。采用了 React 的组件化开发模式,适合熟悉 React 生态的开发者。使用 JavaScript 编写的代码会通过 React Native 框架桥接到原生代码(如 iOS 的 Swift 或 Android 的 Java/Kotl…...

微信小程序处理交易投诉管理,支持多小程序

大家好,我是小悟 1、问题背景 玩过微信小程序生态的,或许就有这种感受,如果收到投诉单,不会及时通知到手机端,而是每天早上10:00向小程序的管理员及运营者推送通知。通知内容为截至前一天24时该小程序账号内待处理的交…...

Pikachu-xss防范措施 - href输出 js输出

总体原则: 输入做过滤,输出做转义 过滤:根据业务需要进行过滤,如:输入点要求输入手机号,则只允许输入手机号格式的数字; 转义:所有输出到前端的数据,都根据输出点进行转…...

数据结构双向链表和循环链表

目录 一、循环链表二、双向链表三、循环双向链表 一、循环链表 循环链表就是首尾相接的的链表,就是尾节点的指针域指向头节点使整个链表形成一个循环,这就弥补了以前单链表无法在后面某个节点找到前面的节点,可以从任意一个节点找到目标节点…...

go基础面试题汇总第一弹

init函数是什么时候执行的? init的函数的作用是什么? 通常作为程序执行前包的初始化,例如mysql redis 等中间件的初始化 init函数的执行顺序是怎样的? 分不同情况来回答: 在同一个go文件里面如果有多个init方法,它们…...

Redis 实现分布式锁时需要考虑的问题

引言 分布式系统中的多个节点经常需要对共享资源进行并发访问,若没有有效的协调机制,可能会导致数据竞争、资源冲突等问题。分布式锁应运而生,它是一种保证在分布式环境中多个节点可以安全地访问共享资源的机制。而在Redis中,使用…...

百年极限论一直存在百年糊涂话:有正数小于所有正数

百年极限论一直存在百年糊涂话:有正数小于所有(任何、任意)正数。 “对于每个大于0的ε[ε>0],都有非0距离数小于ε”显然是病句:有正数小于每个(所有)正数ε。其中任意(任何&am…...

红日靶场1学习笔记

一、准备工作 1、靶场搭建 靶场地址 靶场描述 靶场拓扑图 其他相关靶场搭建详情见靶场地址相关说明 2、靶场相关主机信息 后续打靶场的过程中,如果不是短时间内完成,可能ip会有变化 主机ip密码角色win7192.168.122.131hongrisec2019!边界服务器win…...

【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)

文章目录 从零实现 list 容器:细粒度剖析与代码实现前言1. list 的核心数据结构1.1节点结构分析: 2. 迭代器设计与实现2.1 为什么 list 需要迭代器?2.2 实现一个简单的迭代器2.2.1 迭代器代码实现:2.2.2 解释: 2.3 测试…...

【C#生态园】打造现代化跨平台应用:深度解析.NET桌面应用工具

选择最适合你的.NET UI框架:全面解析六种热门选择 前言 在现代软件开发中,选择合适的桌面应用框架和UI库对于开发人员来说至关重要。本文将介绍几种流行的.NET桌面应用框架和UI库,包括Eto.Forms、Avalonia、ReactiveUI、MahApps.Metro、Mat…...

第二十一章 (动态内存管理)

1. 为什么要有动态内存分配 2. malloc和free 3. calloc和realloc 4. 常⻅的动态内存的错误 5. 动态内存经典笔试题分析 6. 总结C/C中程序内存区域划分 1.为什么要有动态内存管理 我们目前已经掌握的内存开辟方式有 int main() {int num 0; //开辟4个字节int arr[10] …...

机器学习框架总结

机器学习框架是用于构建、训练、评估和部署机器学习模型的工具和库的集合。它们简化了模型开发过程,并提供了预构建的功能、优化的计算性能和对深度学习、监督学习、无监督学习等技术的支持。下面是一些主要的机器学习框架的详细介绍: 1. TensorFlow 1…...

docker pull 超时的问题如何解决

docker不能使用&#xff0c;使用之前的阿里云镜像失败。。。 搜了各种解决方法&#xff0c;感谢B站UP主 <iframe src"//player.bilibili.com/player.html?isOutsidetrue&aid113173361331402&bvidBV1KstBeEEQR&cid25942297878&p1" scrolling"…...

【数学分析笔记】第4章第3节 导数四则运算和反函数求导法则(2)

4. 微分 4.3 导数四则运算与反函数求导法则 双曲正弦函数 sh ⁡ x e x − e − x 2 \sh x\frac{e^x-e^{-x}}{2} shx2ex−e−x​ 双曲余弦函数 ch ⁡ x e x e − x 2 \ch x\frac{e^xe^{-x}}{2} chx2exe−x​ ch ⁡ 2 x − sh ⁡ 2 x 1 \ch^2 x-\sh^2 x1 ch2x−sh2x1 ( e…...

【2024】基于mysqldump的数据备份与恢复

基于mysqldump备份与恢复 mysqldump是一个用于备份 MySQL 数据库的实用工具。 它可以将数据库的结构&#xff08;如数据库、表、视图、存储过程等的定义&#xff09;和数据&#xff08;表中的记录&#xff09;导出为文本文件&#xff0c;这些文本文件可以包含 SQL 语句&#…...

家用无线路由器配置

一.首先进行线路连接。如下图&#xff1a;"光猫LAN口"—网线—"路由器WAN口"。 注意&#xff1a;家用光纤宽带一般选择使用200兆宽带到1000兆&#xff0c;如果网速不达标请查看路由器是否是千兆路由器。千兆路由器通常是双频的&#xff0c;支持两个信号一个…...

模拟算法(4)_外观数列

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 模拟算法(4)_外观数列 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 题目链…...

vsomeip用到的socket

概述&#xff1a; ​ vsomeip用到的socket的代码全部都在implementation\endpoints目录下面&#xff0c;主要分布在下面六个endpoint类中&#xff1a; local_client_endpoint_impl // 本地客户端socket&#xff08;UDS Socket或者127.0.0.1的socket&#xff09;local_server…...

MFC有三个选项:MFC ActiveX控件、MFC应用程序、MFC DLL,如何选择?

深耕AI&#xff1a;互联网行业 算法研发工程师 ​ 目录 MFC ActiveX 控件 控件的类型 标准控件 自定义控件 ActiveX控件 MFC ActiveX控件 标准/自定义控件 MFC ActiveX控件分类 3种MFC如何选择&#xff1f; MFC ActiveX控件 MFC 应用程序 MFC DLL 总结 举例说明…...

边缘概率 | 条件概率

关于什么是边缘概率分布和条件概率分布&#xff0c;在理论上&#xff0c;我自己也还没有理解&#xff0c;那么现在就根据我学习到的理解方式来记录一下&#xff0c;有错误指出&#xff0c;请大家指正&#xff01;&#xff01;&#xff01; 例如&#xff0c;一个箱子里有十个乒乓…...

深入浅出:现代JavaScript开发者必知必会的Web性能优化技巧

亲爱的读者们&#xff0c;欢迎来到本期博客。今天&#xff0c;我们将深入探讨JavaScript开发者在日常工作中如何提升Web性能。在快节奏的Web开发世界中&#xff0c;性能优化至关重要。本文将分享一些实用技巧&#xff0c;帮助你构建快速、高效的Web应用。 1. 使用CDN加速资源加…...

【S32K3 RTD LLD篇5】K344 ADC SW+HW trigger

【S32K3 RTD LLD篇5】K344 ADC SWHW trigger 一&#xff0c;文档简介二&#xff0c;ADC SW HW 触发2.1 软硬件平台2.2 SWADC 软件触发2.3 SWBCTUADC 软件BCTU触发2.4 PITTRIGMUXADC 硬件PIT TRIGUMX触发2.5 EMIOSBCTUHWADC硬件EMIOS BCTU触发2.6 EMIOSBCTUHW LISTADC硬件EMIOS …...

TransFormer 视频笔记

TransFormer BasicsAttention单头注意力 single head attentionQ&#xff1a; query 查寻矩阵 128*12288K key matrix 128*12288SoftMax 归一 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/19e3cf1ea28442eca60d5fc1303921f4.png)Value matrix 12288*12288 MLP Bas…...

前端的混合全栈之路Meteor篇(三):发布订阅示例代码及如何将Meteor的响应数据映射到vue3的reactive系统

Meteor 3.0 是一个功能强大的全栈 JavaScript 框架&#xff0c;特别适合实时应用程序的开发。它的核心机制之一就包括发布-订阅&#xff08;Publish-Subscribe&#xff09;模型&#xff0c;它允许服务器端发布数据&#xff0c;客户端订阅并实时更新。本文将介绍如何在 Meteor 3…...