99.【C语言】数据结构之二叉树的基本知识

目录

1.树的定义

树是递归定义的

一些细碎的概念

2.树的判断法则

树结点结构的定义

自然想到的定义方法

左孩子+右兄弟定义

3.树的应用:文件系统

4.树的特殊形式:二叉树

5.特殊的两类二叉树

满二叉树

完全二叉树

完全二叉树和满二叉树之间的关系

高度为h的完全二叉树结点的数量范围

6.一个性质

7.二叉树概念选择题

度为1的规律


了解二叉树前先了解树

1.树的定义

非线性数据结构(线性的数据结构:顺序表、链表和队列),结构类似倒过来的树(根朝上叶朝下)

树是递归定义的

任何一棵树都由两部分构成:根和子树,子树又由根和子树构成

一些细碎的概念

亲缘关系来描述

注:有★为重要概念

结点的度:一个结点含有的子树的个数称为该结点的度(或者说:一个结点的度是指该结点拥有的子结点的数量); 如上图:A的为6

叶结点或终端结点:度为0的结点称为叶结点; 如上图:B、C、H、I...等结点为叶结点

非终端结点或分支结点:度不为0的结点; 如上图:D、E、F、G...等结点为分支结点

双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点; 如上图:A是B的父结点

孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点; 如上图:B是A的孩子结点

兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:B、C是兄弟结点

树的度:一棵树中,最大的结点的度称为树的度; 如上图:树的度为6

结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;

树的高度或深度:树中结点的最大层次; 如上图:树的高度为4(注:按认知角度来说,空树的高度为0,因此从1开始算:1,2,3,4,..,n)

堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为兄弟结点

结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先

例如:Q的祖先:A,E,J,Q

子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙

森林:由m(m>0)棵互不相交的树的集合称为森林;

2.树的判断法则

树?非树?

答案:都不是树

分析:以第一张图说明:C->D(C为根,D为子树)D->C(D为根,C为子树),矛盾(递归死循环)

因此子树不能相交!

树结点结构的定义

自然想到的定义方法

struct TreeNode
{struct TreeNode* child1;struct TreeNode* child2;struct TreeNode* child3;......struct TreeNode* childN;int data;
};

或者使用数组

#define N 10
struct TreeNode
{struct TreeNode* children[N];int data;
};

上述两种定义的方法不高效,需要手动设置多个结点,而且只针对于N已知的情况,其实使用"左孩子+右兄弟"的方法更简单

左孩子+右兄弟定义

例如下面这个二叉树

用"左孩子+右兄弟"方法画图

3.树的应用:文件系统

打开文件管理器

显然是一个树形结构 

4.树的特殊形式:二叉树

要求:根结点下最多两个子树(左子树和右子树,次序不可颠倒)即0<=度<=2

5.特殊的两类二叉树

满二叉树

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树.也就是说,如果

一个二叉树的层数为K,且结点总数是2^k -1 ,则它就是满二叉树

结点总数的计算方法:等比求和1+2^1+2^2+...+2^{k-1}=2^k-1

完全二叉树

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的.对于深度

为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点

一一对应时称之为完全二叉树. 要注意的是满二叉树是一种特殊的完全二叉树.

即前k-1层都是满的,最后一层要求从左到右是连续的(结点挨着,不能有空缺)

完全二叉树和满二叉树之间的关系

高度为h的完全二叉树结点的数量范围

最少结点个数:第h层1个结点:2^{h-1}-1+1=2^{h-1}

最多结点个数:第h层结点填满(满二叉树):2^h-1

因此★结点的数量范围为[2^{h-1},2^h-1]

同理,如果给出一个二叉树的所有结点n的个数,可以反推出树的高度2^{h-1}\leq n\leq 2^h-1

h取[\log_2 {n+1},1+\log_2 n]之间的整数即可

6.一个性质

对于非空树,度为0的结点的个数永远比度为2的结点个数多一个

设度为0的结点(叶结点)的个数为n_0,度为0的结点的个数为n_2,则有n_0=n_2+1

7.二叉树概念选择题

1.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

A n
B n+1
C n-1
D n/2

2.一棵完全二叉树的结点数位为531个,那么这棵树的高度为( )
A 11
B 10
C 8
D 12

3.一个具有767个结点的完全二叉树,其叶子结点个数为()
A 383
B 384
C 385
D 386

答案:1.A 2.B 3.B

分析:

解:

1.设二叉树所有结点的个数为n,度为0的结点的个数为n_0,度为1的结点的个数为n_1,度为0的结点的个数为n_2

一定有n=n_0+n_1+n_2,又由二叉树的一个性质可知n_0=n_2+1

现求n_1的值:题目要求完全二叉树的所有结点个数为2n,是偶数

例如下图,显然n_1值为1 

 

则有这三式:n=n_0+n_1+n_2n_0=n_2+1;n_1=1

因此n_0=n,选A

度为1的规律

满二叉树n_1=0,完全二叉树n_1为1或0

其中对于完全二叉树,所有结点个数为奇数时,n_1=0所有结点个数为偶数时,n_1=1

2.用高度为h的完全二叉树结点的数量范围结论做题

[2^{h-1},2^h-1],取h=10,则[512,1023],531在范围内,选B

3.用度为1的规律做题,n=767,为奇数,因此n_1=0,因此767=n_0+n_2,又因为n_0=n_2+1,则

n_0=384

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476180.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bug:引入Feign后触发了2次、4次ContextRefreshedEvent

Bug&#xff1a;引入Feign后发现监控onApplication中ContextRefreshedEvent事件触发了2次或者4次。 【原理】在Spring的文档注释中提示到&#xff1a; Event raised when an {code ApplicationContext} gets initialized or refreshed.即当 ApplicationContext 进行初始化或者刷…

Ubuntu20.04从零安装IsaacSim/IsaacLab

Ubuntu20.04从零安装IsaacSim/IsaacLab 电脑硬件配置&#xff1a;安装Isaac sim方案一&#xff1a;pip安装方案二&#xff1a;预构建二进制文件安装1、安装ominiverse2、在ominiverse中安装isaac sim&#xff0c;下载最新的4.2版本 安装Isaac Lab1、IsaacLab环境克隆2、创建con…

低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试

本节目录 一、设计思路 二、loop环回模块 三、仿真模块 四、仿真验证 五、上板验证 六、往期文章链接本节内容 一、设计思路 串口数据的收发回环测试&#xff0c;最简单的硬件测试是把Tx和Rx连接在一起&#xff0c;然后上位机进行发送和接收测试&#xff0c;但是需要考虑到串…

算法编程题-排序

算法编程题-排序 比较型排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序归并排序 非比较型排序算法计数排序基数排序 本文将对七中经典比较型排序算法进行介绍&#xff0c;并且给出golang语言的实现&#xff0c;还包括基数排序、计数排序等非比较型的算法的介绍和实现…

【软考】系统架构设计师-信息系统基础

#信息系统基础核心知识点 信息系统5个基本功能&#xff1a;输入、存储、处理、输出和控制 诺兰模型&#xff1a;信息系统计划的阶段模型&#xff0c;6阶段 初始阶段&#xff0c;传播阶段&#xff0c;控制阶段&#xff0c;集成阶段&#xff0c;数据管理阶段&#xff0c;成熟阶…

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构&#xff08;Enterprise Architecture&#xff0c;EA&#xff09;是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念&#xff0c;转念一想必定和我们软件架构…

使用低成本的蓝牙HID硬件模拟鼠标和键盘来实现自动化脚本

做过自动化脚本的都知道&#xff0c;现在很多传统的自动化脚本方案几乎都可以被检测&#xff0c;比如基于root&#xff0c;adb等方案。用外置的带有鼠标和键盘功能集的蓝牙HID硬件来直接点击和滑动是非常靠谱的方案&#xff0c;也是未来的趋势所在。 一、使用蓝牙HID硬件的优势…

数据结构-二叉树_堆

目录 1.二叉树的概念 ​编辑1.1树的概念与结构 1.2树的相关语 1.3 树的表示 2. ⼆叉树 2.1 概念与结构 2.2 特殊的⼆叉树 2.2.2 完全⼆叉树 2.3 ⼆叉树存储结构 2.3.1 顺序结构 2.3.2 链式结构 3. 实现顺序结构⼆叉树 3.2 堆的实现 3.2.2 向下调整算法 1.二叉树的概…

【FPGA开发】AXI-Full总线接口介绍、FPGA搭建仿真平台

文章目录 协议解读接口介绍AW—写地址通道W—写数据通道B—写响应通道AR—读地址通道R—读数据通道 FPGA搭建仿真平台 本文主要介绍AXI-FULL的相关基础内容&#xff0c;AXI-Lite请移步&#xff1a; 【FPGA开发】AXI-Lite总线协议解读、Verilog逻辑开发与仿真、Alex Forencich代…

【已解决】“EndNote could not connect to the online sync service”问题的解决

本人不止一次在使用EndNote软件时遇到过“EndNote could not connect to the online sync service”这个问题。 过去遇到这个问题都是用这个方法来解决&#xff1a; 这个方法虽然能解决&#xff0c;但工程量太大&#xff0c;每次做完得歇半天身体才能缓过来。 后来再遇到该问…

Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)

全流程导览 一、前言二、基本介绍2.1全过程软件基本介绍2.1.1 Pytorch2.1.2 Anaconda2.1.3 Pycharm2.1.4 显卡GPU及其相关概念2.1.5 CUDA和cuDNN 2.2 各部分相互间的联系和安装逻辑关系 三、Anaconda安装3.1安装Anaconda3.2配置环境变量3.3检验是否安装成功 四、Pycharm安装五、…

Java-05 深入浅出 MyBatis - 配置深入 动态 SQL 参数、循环、片段

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

python成长技能之正则表达式

文章目录 一、认识正则表达式二、使用正则表达式匹配单一字符三、正则表达式之重复出现数量匹配四、使用正则表达式匹配字符集五、正则表达式之边界匹配六、正则表达式之组七、正则表达式之贪婪与非贪婪 一、认识正则表达式 什么是正则表达式 正则表达式&#xff08;英语&…

OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;分享&#xff5c;16个含源码和数据集的计算机视觉实战项目 本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括&#xff1a; 1. 人…

Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

HarmonyOs鸿蒙开发实战(17)=>沉浸式效果第二种方案一组件安全区方案

1.沉浸式效果的目的 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感&#xff0c;从而使用户获得最佳的UI体验。 2.组件安全区方案介绍 应用在默认情况下窗口背景绘制范围是全屏&#xff0c;但UI元素被限制在安全区内…

五天SpringCloud计划——DAY1之mybatis-plus的使用

一、引言 咱也不知道为啥SpringCloud课程会先教mybatis-plus的使用&#xff0c;但是教都教了&#xff0c;就学了吧&#xff0c;学完之后觉得mybatis-plus中的一些方法还是很好用了&#xff0c;本文作为我学习mybatis-plus的总结提升&#xff0c;希望大家看完之后也可以熟悉myba…

Matlab 答题卡方案

在现代教育事业的飞速发展中&#xff0c;考试已经成为现代教育事业中最公平的方式方法&#xff0c;而且也是衡量教与学的唯一方法。通过考试成绩的好与坏&#xff0c;老师和家长可以分析出学生掌握的知识多少和学习情况。从而老师可以了解到自己教学中的不足来改进教学的方式方…

丹摩|丹摩助力selenium实现大麦网抢票

丹摩&#xff5c;丹摩助力selenium实现大麦网抢票 声明&#xff1a;非广告&#xff0c;为用户体验 1.引言 在人工智能飞速发展的今天&#xff0c;丹摩智算平台&#xff08;DAMODEL&#xff09;以其卓越的AI算力服务脱颖而出&#xff0c;为开发者提供了一个简化AI开发流程的强…

【生成数据集EXCEL文件】使用生成对抗网络GAN生成数据集:输出生成数据集EXCEL

本文采用MATLAB编程&#xff0c;使用生成对抗网络GAN生成数据集&#xff1a;输出生成数据集EXCEL格式文件&#xff0c;方便大家使用。 实际工程应用中&#xff0c;由于经济成本和人力成本的限制&#xff0c;获取大量典型的有标签的数据变得极具挑战&#xff0c;造成了训练样本…