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

二叉树详解(求二叉树的结点个数、深度、第k层的个数、遍历等)

二叉树,是一种特殊的树,特点是树的度小于等于2(树的度是整个树的结点的度的最大值),由于该特性,构建二叉树的结点只有三个成员,结点的值和指向结点左、右子树的指针。

typedef int DateType;
typedef  struct TreeNode
{DateType val;//结点的值struct TreeNode*left;//指向左结点struct TreeNode*right;//指向右节点
}Node;

对于二叉树,有一种特殊的情况,即一共有k层,前k-2层每个结点的度都是2,第k-1层若有个结点有子树,则其左侧的结点均有子树,这种情况被称为完全二叉树。若第k-1层也是所有结点的度都是2,则为满二叉树。

二叉树的遍历:

1.前序遍历:对于二叉树的每个结点,都是先访问根节点,再访问其左子树,访问完再访问右子树。前序遍历可以用于深度搜索

2.中序遍历:对于二叉树的每个结点,都是先访问其左子树,再访问根节点,访问完再访问右子树。中序遍历就是把二叉树的每个结点垂直投影到同一水平的序列。

3.后序遍历:对于二叉树的每个结点,都是先访问其左子树,再访问访问右子树,访问完再访问根节点。

4.层序遍历:一层一层的访问,每一层都是先访问左侧的结点再访问右侧的。层序遍历可以用于广度搜索

知道前序遍历和后序遍历的其中一个结果,再知道中序遍历的结果,可以唯一确定一颗二叉树,但只知道前序遍历和后序遍历的结果不能唯一确定。

求树的深度:

思路:化成求子树的深度,找出其中的最大值,再加上根节点这一层(即加1),就是当前结点的深度。

int maxdepth(TNode *root)
{if(root==NULL)
{return 0;
}return max(maxdepth(root->left),maxdepth(root->right))+1;}

求结点的个数:

思路:对于每个结点,求左子树的结点的个数和右子树的结点的个数,再加上根节点,就是以当前结点为根的树的结点的个数。

 

int Nodenum(Node*root)
{if(root==NULL){return 0;}return Nodenum(root->left)+Nodenum(root->right)+1;}

求叶子结点的个数:

思路:对每个结点,判断其是不是叶子结点,若不是则找左子树和右子树的叶子结点的个数,若是则返回1.

int NodeLeaveNum(Node*root)
{if(root==NULL)return 0;if(root->left==NULL&&root->right==NULL)return 1;return  NodeLeaveNum(root->left)+ NodeLeaveNum(root->right);}

求第k层结点的个数:

思路:对于第m层的结点找第n层,就是第m层的子节点找第n-1层。

int NodeKNum(Node*root, int k)
{if(root==NULL)return 0;if(k==1)return 1;
//上述两个判断位置不能颠倒,否则会出错return  NodeKNum(root->left,k-1)+ NodeKNum(root->right,k-1);}

 

 

相关文章:

二叉树详解(求二叉树的结点个数、深度、第k层的个数、遍历等)

二叉树,是一种特殊的树,特点是树的度小于等于2(树的度是整个树的结点的度的最大值),由于该特性,构建二叉树的结点只有三个成员,结点的值和指向结点左、右子树的指针。 typedef int DateType; t…...

Apollo配置中心及Python连接

本文将会介绍如何启动Apollo,在Apollo中配置参数,以及如何使用Python连接Apollo. Apollo介绍 在文章Python之读取配置文件和文章Python之配置文件处理中,笔者分别介绍了如何使用Python来处理ini, yaml, conf等配置文件。这种配置方式比较方便…...

LuatOS-SOC接口文档(air780E)--audio - 多媒体音频

常量 常量 类型 解释 audio.PCM number PCM格式,即原始ADC数据 audio.MORE_DATA number audio.on回调函数传入参数的值,表示底层播放完一段数据,可以传入更多数据 audio.DONE number audio.on回调函数传入参数的值,表示…...

Golang gorm manytomany 多对多 更新、删除、替换

Delete 移除 只删除中间表的数据 删除原有的 var a Article1db.Preload("Tag1s").Take(&a, 1)fmt.Printf("%v", a) {1 k8s [{1 cloud []} {2 linux []}]}mysql> select * from article1; ------------ | id | title | ------------ | 1 | k8s …...

FPGA-结合协议时序实现UART收发器(四):串口驱动模块uart_drive、例化uart_rx、uart_tx

FPGA-结合协议时序实现UART收发器(四):串口驱动模块uart_drive、例化uart_rx、uart_tx 串口驱动模块uart_drive、例化uart_rx、uart_tx,功能实现 文章目录 FPGA-结合协议时序实现UART收发器(四)&#xff1…...

Transformers-Bert家族系列算法汇总

🤗 Transformers 提供 API 和工具,可轻松下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本、碳足迹,并节省从头开始训练模型所需的时间和资源。这些模型支持不同形式的常见任务,例如: 📝 自…...

Vulnhub系列靶机---HarryPotter-Fawkes-哈利波特系列靶机-3

文章目录 信息收集主机发现端口扫描dirsearch扫描gobuster扫描 漏洞利用缓冲区溢出edb-debugger工具msf-pattern工具 docker容器内提权tcpdump流量分析容器外- sudo漏洞提权 靶机文档:HarryPotter: Fawkes 下载地址:Download (Mirror) 难易程度&#xff…...

【服务器】ASUS ESC4000-E11 安装系统

ASUS ESC4000-E11说明书 没找到 ASUS ESC4000-E11的说明书,下面是ESC4000A-E11的说明书: https://manualzz.com/doc/65032674/asus-esc4000a-e11-servers-and-workstation-user-manual 下载地址: https://www.manualslib.com/manual/231379…...

创建java文件 自动添加作者、时间等信息 – IDEA 技巧

2023 09 亲测 文章目录 效果修改位置配置信息 效果 每次创建文件的时候,自动加上作者、时间等信息 修改位置 打开:File —> Settings —> Editor —> File and Code Templates —> includes —> FileHeader 配置信息 /*** author : Java…...

第27章_瑞萨MCU零基础入门系列教程之freeRTOS实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...

Java学习之--类和对象

💕粗缯大布裹生涯,腹有诗书气自华💕 作者:Mylvzi 文章主要内容:Java学习之--类和对象 类和对象 类的实例化: 1.什么叫做类的实例化 利用类创建一个具体的对象就叫做类的实例化! 当我们创建了…...

Unity技术手册-UGUI零基础详细教程-Canvas详解

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…...

破天荒呀!小杜微信有名额了

写在前面 小杜粉,众所周知前面加小杜微信为好友的基本都是由名额限制的。一般都是付费进入社群且进行备注,小杜才会长期保留微信好友。主要由于,添加的人数太多了,微信账号人数名额有限。因此,小杜过一段时间&#xf…...

领域驱动设计:领域模型与代码模型的一致性

文章目录 领域对象的整理从领域模型到微服务的设计领域层的领域对象应用层的领域对象 领域对象与微服务代码对象的映射典型的领域模型非典型领域模型 DDD 强调先构建领域模型然后设计微服务,以保证领域模型和微服务的一体性,因此我们不能脱离领域模型来谈…...

TypeScript命名空间和模块

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 命名空间(Namespace) 命名空间(Namespace)使用场景 第三方库 兼容…...

C++学习笔记--函数重载(1)

文章目录 序言一、洞悉函数重载决议1.1、重载决议的基本流程1.2、Name Lookup1.2.1、Qualified Name Lookup1.2.1.1、Class Member Lookup1.2.1.2、Namespace Member Lookup 1.2.2、Unqualified Name Lookup1.2.2.1、Usual Unqualified Lookup1.2.2.2、Argument Dependant Look…...

交叉编译poco-1.9.2

目录 一、文件下载二、编译三、可能遇到的问题和解决方法3.1 error "Unknown Hardware Architecture."3.2 error Target architecture was not detected as supported by Double-Conversion一、文件下载 下载地址:poco-1.9.2 二、编译 解压目录后打开build/config/…...

C++中如何处理超长的数字(long long类型的整数都无法存储的)

C中如何处理超长的数字(long long类型的整数都无法存储的) 在 C中,如果数字超出了 long long 类型的范围,可以考虑使用字符串或第三方库(如 Boost.Multiprecision)来表示和处理超长数字。要使用第三方库需…...

RabbitMQ MQTT集群方案官方说明

RabbitMQ MQTT 官方网说明 官方地址: https://www.rabbitmq.com/mqtt.html 从3.8开始,该MQTT插件要求存在一定数量的群集节点。这意味着三分之二,五分之三,依此类推。 该插件也可以在单个节点上使用,但不支持两个节点的集群。 如…...

深圳唯创知音电子将参加IOTE 2023第二十届国际物联网展•深圳站

​ 2023年9月20~22日,深圳唯创知音电子将在 深圳宝安国际会展中心(9号馆9B1)为您全面展示最新的芯片产品及应用方案,助力传感器行业的发展。 作为全球领先的芯片供应商之一,深圳唯创知音电子一直致力于为提供高质量、…...

xiaomusic设备DID配置故障排除与优化指南

xiaomusic设备DID配置故障排除与优化指南 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic xiaomusic作为一款开源的小爱音响音乐服务工具,让用户能够通过…...

PROJECT MOGFACE自动化运维:服务器监控日志分析与告警报告生成

PROJECT MOGFACE自动化运维:服务器监控日志分析与告警报告生成 每天凌晨,当运维工程师小李被手机告警铃声惊醒,睡眼惺忪地打开电脑,面对几十台服务器海量的监控图表和日志文件时,他总在想:有没有一种方法&…...

Ubuntu 20.04上为Franka Panda安装libfranka 0.8.0:我如何绕开实时内核的版本陷阱

Ubuntu 20.04下Franka Panda的libfranka 0.8.0安装实战:实时内核版本选择的深度解析 当我在实验室第一次启动Franka Panda机械臂时,完全没预料到会在看似简单的环境配置环节耗费整整三天时间。作为一款广泛应用于科研和工业场景的协作机器人,…...

Kindle漫画转换终极方案:如何解决电子阅读器上的格式兼容性问题

Kindle漫画转换终极方案:如何解决电子阅读器上的格式兼容性问题 【免费下载链接】kcc KCC (a.k.a. Kindle Comic Converter) is a comic and manga converter for ebook readers. 项目地址: https://gitcode.com/gh_mirrors/kc/kcc 你是否曾经尝试在Kindle上…...

Optick多线程性能分析:游戏引擎中的并发性能优化实战

Optick多线程性能分析:游戏引擎中的并发性能优化实战 【免费下载链接】optick C Profiler For Games 项目地址: https://gitcode.com/gh_mirrors/op/optick Optick是一款专为游戏开发打造的C性能分析工具,能够精准捕捉多线程应用中的性能瓶颈&…...

League-Toolkit:重新定义英雄联盟游戏体验的智能助手

League-Toolkit:重新定义英雄联盟游戏体验的智能助手 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit …...

Qwen3-TTS-Tokenizer-12Hz快速上手:Web界面一键处理音频文件

Qwen3-TTS-Tokenizer-12Hz快速上手:Web界面一键处理音频文件 1. 为什么选择Qwen3-TTS-Tokenizer-12Hz? 想象一下,你正在开发一个语音社交应用,用户上传的音频文件体积大、传输慢,服务器存储成本居高不下。传统压缩算…...

基于大数据技术的产品评价分析系统设计与实现

前言本研究聚焦于设计与实现一种基于大数据技术的产品评价分析系统,通过构建多层架构体系与融合多元技术方法,为企业决策提供智能化支撑。 研究采用分层架构设计理念,将系统划分为数据采集、存储、处理、分析与展示五大模块。数据采集层综合运…...

视频硬字幕提取终极指南:用本地AI工具10倍提升你的字幕制作效率

视频硬字幕提取终极指南:用本地AI工具10倍提升你的字幕制作效率 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测…...

大数据-253 离线数仓 - Airflow 入门与任务调度实战:DAG、Operator、Executor 部署排错指南

TL;DR 场景:面向离线数仓与定时任务场景,快速理解 Airflow 的核心概念、DAG 编排方式与基础命令。结论:本文内容适合作为 Airflow 入门示例,但代码与命令明显偏旧,需区分 Airflow 1.x 与 2.x 版本差异。产出&#xff…...