链式二叉树,递归的暴力美学
目录
1.链式二叉树概念
2.链式二叉树的实现
3.先序遍历
4.中序遍历
5.后序遍历
6.求链式二叉树的结点个数
7.链式二叉树的叶子结点个数
8.求二叉树的k层的结点个数
9.链式二叉树求深度
10.求值为x的结点
11.链式二叉树的销毁
12.二叉树的层序遍历
13.判断二叉树是否为完全二叉树
1.链式二叉树概念
链式二叉树和名字一样,是使用链式结构实现的二叉树,结点之间使用指针连接起来的。之前的二叉树是使用顺序结构进行存储的,不同于顺序存储,链式结构可以将各结点之间的关系表示清晰。
2.链式二叉树的实现
二叉树,首先肯定要有根节点的,然后是左右两个孩子结点,分别叫做left和right即可,通过一个结构体来实现链式二叉树。
如图所示,一个链式二叉树的结点就是实现好了。
我们要自己手动将结点连接起来,这就实现了一个完全二叉树。
3.先序遍历
简单的几行代码就实现好了,这就是递归的魅力所在。
接下来分析一下,
递归是一定要有终止条件的,如果没有终止条件的话递归就会陷入死循环,并且占用的大量的函数栈帧,先序遍历的终止条件就是根节点为NULL,此时就结束递归,不会进入到后面的步骤,如果这个根结点不是空指针,那就打印这个结点的data,然后进入左子树进行先序遍历,如果左子树的根节点不是空指针,那就打印左子树的根结点的值,然后继续进入左子树的左子树,一直走到左子树为空,然后此时就遍历右子树,进而就实现了链式二叉树的先序遍历。
4.中序遍历
过程同先序遍历一样,只是打印的结点不同,这里不过多讲解。
5.后序遍历
同上。
6.求链式二叉树的结点个数
同样,这里也是用到了递归的思想,仅仅需要简单的几行代码,就实现了结点的计算。
终止条件还是root==NULL,根结点是空结点之后,说明此时就已经走到了一个结点的空指针的位置,没有必要计算的,直接返回0即可,下面的return1+是为了算上开始的结点,需要+1,然后就加上这个结点的左子树和右子树就实现了递归来求的链式二叉树的结点个数。
7.链式二叉树的叶子结点个数
叶子结点就是有一个父节点,然后他的左结点是空指针,他的又结点也是空指针,那这个结点就是叶子结点,要求的叶子结点个数也是通过递归实现的。
终止条件是有两个的一个是root==NULL,另一个就是左右结点都是空指针。
分析一下这两个终止条件,root==NULL,这个结点已经是空指针了没有加上去的意义,那肯定会有人有疑问了,根结点的左右结点是空指针了,怎么会向下递归呢,那就大错特错了,如果一个结点只有一个子结点的话,两个结点都进入,空结点返回0,非空返回1,这是其中一个终止条件的意义,另一个就很明显了,就是左右结点是空就返回1,没有什么过多需要解释的,如果这个结点不符合上述两个终止条件的话,就返回他的左子树+他的右子树。
8.求二叉树的k层的结点个数
k是层数,第一个终止条件就不用说了,重点是k==1时,返回1,k不等于1就返回左子树的k-1加上右子树的k-1,比如第二层,我们传入k=2,不会终止,然后进入左子树,左子树的k=1,右子树的k也等于1,加起来就是2.
9.链式二叉树求深度
求深度肯定不可能只求一边的深度就返回,要进行比较的,所以将左子树和右子树进行比较才能返回。
10.求值为x的结点
如果root的data等于x,就直接返回这个data的地址了,不等于的就看左子树,寻找左子树是否有等于这个值的结点,然后判断,如果不是空指针那一定是找到了,直接返回地址,右子树同理。
11.链式二叉树的销毁
需要修改指针的值,那就要取出指针的地址,下面的同样是递归,不过多讲述。
12.二叉树的层序遍历
需要进行层序遍历,这里需要借助队列来实现了,首先肯定是要创建一个队列的,然后队列进行初始化,写一个循环,只要队列不为空,就一直入队列,队列是先入先出的特点,入队列之后直接打印,然后队列删除队头,然后左子树右子树入队列接着打印,一直到队列为空,此时就实现了队列的层序遍历。
13.判断二叉树是否为完全二叉树
还需借助队列来完场,创建队列,将root入队,获取队列队头,然后队头删除,然后就一直入队,如果此时队头是空指针就直接跳出循环了,因为已经是空指针了,肯定没办法获取他的左右孩子。那么就进入下一个循环,循环条件是队列非空,因为如果是二叉树,在取完最后一个结点之后,队列中剩下的都是空结点,如果不是完全二叉树的话,里面就会剩下非空的,一直取到队列为空,如果取到了非空就直接返回false,一直走完循环结束,到最后没有找到,那就直接返回true,说明这是一个完全二叉树。
相关文章:

链式二叉树,递归的暴力美学
目录 1.链式二叉树概念 2.链式二叉树的实现 3.先序遍历 4.中序遍历 5.后序遍历 6.求链式二叉树的结点个数 7.链式二叉树的叶子结点个数 8.求二叉树的k层的结点个数 9.链式二叉树求深度 10.求值为x的结点 11.链式二叉树的销毁 12.二叉树的层序遍历 13.判断二叉树是否…...
计算机网络之---数据传输与比特流
数据传输的概念 数据传输是指将数据从一个设备传输到另一个设备的过程。传输过程涉及将高层协议中的数据(如包、帧等)转化为比特流,在物理介质上传输。 比特流的概念 比特流是数据传输中最基本的单位,它是由0和1组成的连续比特…...

基于单片机的数字电能表(论文+源码)
1. 系统整体方案设计 数字电能表系统设计解决了传统的用电设备的应用问题,能够让用户通过手机等移动设备获取电器的实时工作状态及数据信息,能够帮助找出高能耗的电器,及时停用或替换高能耗用电设备。在功能上需要实现高压交流电压的测量&am…...

打造三甲医院人工智能矩阵新引擎(五):精确分割模型篇 Medical SAM 2
一、引言 1.1 研究背景与意义 在当今的医疗领域,医学图像分割技术起着举足轻重的作用。它能够精准地从医学图像中分离出特定的器官、组织或病变区域,为临床诊断、手术规划、疾病监测等诸多环节提供不可或缺的支持。例如,在肿瘤疾病的诊疗过程中,通过对 CT、MRI 等影像的精…...

python无需验证码免登录12306抢票 --selenium(2)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示:这里可以添加本文要记录的大概内容: 就在刚刚我抢的票:2025年1月8日…...
第1章 Web系统概述 教案
谢从华,高蕴梅 著.Web前端设计基础入门——HTML5、CSS3、JavaScript(微课视频版),2023, 清华大学出版社. ISBN:9787302641261. 1、教学目标 知识目标 学生能够准确阐述 Internet 的含义、发展历程、提供的网络服务,以…...

AI是IT行业的变革力量,还是“职业终结者”?
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 AI是…...
[git]ubuntu git 开启Verbose Mode模式
Verbose Mode 默认情况下,git 在终端屏幕上报告最少的信息。但是,如果您遇到任何类型的问题,启用Verbose Mode会很有帮助 开启Verbose Mode export GIT_CURL_VERBOSE1 关闭Verbose Mode export GIT_CURL_VERBOSE0 还可以通过简单地在命令…...
解读若依框架中的 @Xss 注解
文章目录 1. 背景与问题定义什么是 XSS 攻击?XSS 的常见类型传统解决方案的局限性 2. Xss 注解详解Xss 注解源码解析注解核心要素 XssValidator 实现解析核心逻辑 3. 应用场景场景一:表单输入校验示例代码 场景二:API 接口参数校验示例代码 4…...
【JVM-2】JVM图形化监控工具大全:从入门到精通
在Java应用的开发和运维过程中,JVM(Java虚拟机)的监控和调优是至关重要的。相比于命令行工具,图形化监控工具提供了更直观的界面和更强大的功能,适合不熟悉命令行的用户。本文将详细介绍常用的JVM图形化监控工具及其使…...

基于华为ENSP的OSPF数据报文保姆级别详解(3)
本篇博文摘要 🌟 基于华为ensp之OSPF数据报文——头部信息、Hello包、DR/BDR选举、DBD包等保姆级别具体详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 📘 在这个快速发展的技术时代,与时俱进是每个IT人的…...

【Java】-- 利用 jar 命令将配置文件添加到 jar 中
目录 1、准备 2、目标 3、步骤 3.1、安装 jdk 3.2、添加配置文件 3.3、校验 1、准备 java 环境hadoop-core-1.2.1.jar 和 core-site.xml 2、目标 将 core-site.xml 添加到 hadoop-core-1.2.1.jar 中。 3、步骤 3.1、安装 jdk 3.2、添加配置文件 jar -cvf hadoop-core-…...

【HarmonyOS NEXT】鸿蒙应用点9图的处理(draw9patch)
【HarmonyOS NEXT】鸿蒙应用点9图的处理(draw9patch) 一、前言: 首先在鸿蒙中是不支持安卓 .9图的图片直接使用。只有类似拉伸的处理方案,鸿蒙提供的Image组件有与点九图相同功能的API设置。 可以通过设置resizable属性来设置R…...

0050.ssm+小程序高校订餐系统+论文
一、系统说明 基于springMvcvueelementui小程序 开发的高校订餐系统,系统功能齐全, 代码简洁易懂,适合小白学编程。 二、系统架构 前端:vue| elementui | 小程序 后端:springMvc | mybatis 环境:jdk1.8 | mysql8.0 | maven 三…...
【Apache Paimon】-- 14 -- Spark 集成 Paimon 之 Filesystem Catalog 与 Hive Catalog 实践
目录 1. 背景介绍 2. 环境准备 2.1、技术栈说明 2.2、环境依赖 2.3、硬件与软件环境 2.4、主要工具清单 2.5、Maven 项目结构 2.6、maven pom.xml 依赖 3. Spark 与 Paimon Filesystem Catalog 集成 3.1、HDFS FileSystem catalog 3.1.1、代码内容 3.1.2、运行输出…...

renben-openstack-使用操作
管理员操作 (1)上传一个qcow2格式的centos7镜像 (2)管理员------>云主机类型------>创建云主机类型 名称:Centos7 VCPU数量:1 内存: 1024 根磁盘: 10G 其他的默认 点击创建云主机类型即可 界面会显示如下 创建公网络 (1)创建…...

开源CMS建站系统的安全优势有哪些?
近年来,用户们用开源CMS系统搭建网站的比例也越来越高,它为用户提供了便捷的网站建设解决方案。其中,亿坊CMS建站系统更因安全方面备受用户欢迎,下面带大家一起全面地了解一下。 一、什么是开源CMS? 开源CMS指的是那…...

基于mybatis-plus历史背景下的多租户平台改造
前言 别误会,本篇【并不是】 要用mybatis-plus自身的多租户方案:在表中加一个tenant_id字段来区分不同的租户数据。并不是的! 而是在假设业务系统已经使用mybatis-plus多数据源的前提下,如何实现业务数据库隔开的多租户系统。 这…...

后台管理系统用户退出登录方案实现
退出登录一直是一个通用的前端实现方案,对于退出登录而言,它的触发时机一般有两种: 1. 用户主动退出,即用户点击登录按钮之后退出; 2. 用户被动退出,Token过期或被 其他人"顶下来" 时退出&…...
C# 对象和类型(结构)
❝ 类和结构的区别 字段、属性和方法 按值和引用传送参数 方法重载 构造函数和静态构造函数 只读字段 Object类,其他类型都从该类派生而来 结构 如何将类保持在堆中,通过这种方式可以在数据的生存期上获得很大的灵活性,但性能会有一定的损失。…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...