二叉树练习题(递归展开图详解哦)

news2024/10/6 20:27:50

全文目录

  • 引言
  • 单值二叉树
    • 题目描述及思路
    • 实现
  • 二叉树的最大深度
    • 题目描述及思路
    • 实现
  • 翻转二叉树
    • 题目描述及思路
    • 实现
  • 相同的树
    • 题目描述及思路
    • 实现
  • 总结

引言

前面我们介绍了二叉树的相关基础知识,并且了解到二叉树的表示有两种结构:顺序结构与链式结构。即,使用顺序表或链表来表示二叉树:
戳我看二叉树详解哦

在上一篇文章中,我们了解了二叉树的顺序访问(也就是堆),以及其接口实现:
戳我看堆及接口实现哦

在这篇文章中要介绍二叉树的链式访问,但是由于链表结点是难以随意访问二叉树中的结点的,用链式的二叉树进行增删查改其实是没有多少意义的。在本篇文章中就介绍几道二叉树链式结构的题目:单值二叉树、二叉树的最大深度、翻转二叉树、相同的树:

由于链式二叉树的节点结构,所以它具有很好的递归特性,在本篇文章中也会详细的画出递归展开图来说明:

typedef int BTDataType;
struct BinaryTreeNode
{
    struct BinTreeNode* _pLeft; // 指向当前节点左孩子
    struct BinTreeNode* _pRight; // 指向当前节点右孩子
    BTDataType _data; // 当前节点值
}

单值二叉树

单值二叉树OJ链接

题目描述及思路

在这里插入图片描述
我们需要实现函数判断二叉树中的值是否全部相等,相等返回true,否则返回false。

我们可以递归:
每次递归判断本结点与其左右孩子结点的值是否相等,相等向上一级返回真,否则返回假;
如果遇到本结点为NULL则该条线的递归结束,向上一级返回真;
本结点判断完,若为真,继续向下递归,否则直接返回假;

向上一级返回时,要本结点的左右孩子结点分别返回真时才为真,所以返回它的左右孩子向其返回的值的逻辑与的结果。

实现

首先判断root是否为NULL,若为NULL直接返回true;
如果本结点的值与其左右孩子的值不相等,直接返回false;
相等后,再将其左右孩子结点作为根结点root,分别递归,返回他们返回的值的逻辑与的结果:

bool isUnivalTree(struct TreeNode* root)
{
	if (root == NULL)
	{
		return true;
	}
	if ((root->left && root->left->val != root->val)||(root->right && root->right->val != root->val))
	{
		return false;
	}
	else
	{
		return isUnivalTree(root->left) && isUnivalTree(root->right);
	}
}

递归展开图(由于函数代码有点长,画图时只写出函数名和返回值部分):
在这里插入图片描述

二叉树的最大深度

二叉树的最大深度OJ链接

题目描述及思路

在这里插入图片描述
我们需要实现函数,求出二叉树的最大深度。

我们可以递归:
每次递归计算本结点的左右子树的深度;
然后比较左右子树的深度,较大值+1就是本结点的深度,返回这个值给上一级。

实现

这道题的实现较为简单:

首先判断本结点是否为NULL,若为空直接返回0;
然后分别计算并存储左右子树的深度;
最后返回左右子树较大者+1的值:

需要注意的是,计算出左右子树的深度后,要将结果存储,否则会严重影响效率。

int maxDepth(struct TreeNode* root) 
{
	if (root == NULL)
	{
		return 0;
	}
	int lefthigh = maxDepth(root->left);
	int righthigh = maxDepth(root->right);

	return lefthigh > righthigh ? lefthigh + 1 : righthigh + 1;
}

递归展开图(省略判断NULL的部分):
在这里插入图片描述

翻转二叉树

翻转二叉树OJ链接

题目描述及思路

在这里插入图片描述
我们需要实现函数,实现二叉树左右结点的翻转。

我们知道,二叉树的每一个结点中包括本结点的值与两个孩子结点的指针,所以我们只需要递归实现将每一个结点的左右孩子结点的指针交换即可:

实现

首先判断本结点是否为NULL,若为空返回NULL;
然后交换两个孩子结点的指针;
然后分别将左右孩子为参数递归;
最后向上一级返回本结点的指针即可:

struct TreeNode* invertTree(struct TreeNode* root)
{
	if (root == NULL)
	{
		return NULL;
	}
	struct TreNode* temp = root->left;
	root->left = root->right;
	root->right = temp;

	invertTree(root->left);
	invertTree(root->right);
	return root;
}

递归展开图:
在这里插入图片描述

相同的树

相同的树OJ链接

题目描述及思路

在这里插入图片描述
我们需要实现函数判断两个二叉树是否相同,相等返回true,否则返回false。

我们可以递归判断每个结点的本身与其左右孩子结点是否分别相等:
判断时,可以只判断本结点的值是否相等;
若本结点相等,则向下递归,返回左右子结点返回的值逻辑与的结果。

实现

首先判断p与q是否为空,若均为空,则返回真;
若不是全为空,但有其中一个为空,则说明不像等,则返回假;
然后判断本结点的值是否相等,若不相等返回假;
若相等,将两树的左右结点分别递归,返回他们返回的值的逻辑与的结果:

bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{
	if (p == NULL && q == NULL)
	{
		return true;
	}
	else if (p == NULL || q == NULL)
	{
		return false;
	}
	if(p->val!=q->val)
	{
		return false;
	}
	else
	{
		return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
	}
}

递归展开图(省略判断部分):
在这里插入图片描述

总结

到此,关于链式二叉树的几道OJ练习题就介绍到这里了

如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出

如果本文对你有帮助,希望一键三连哦

希望与大家共同进步哦

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教您注册/使用Claude

文章目录注册slack注意事项最近几天出现了一个很火的AI聊天项目——Claude,据说可以媲美ChatGPT,最主要的就是可以很好的解决我们国内的使用痛点,可以完全免费无限制的使用,下面就和大家分享一下正确的注册和使用Claude的流程&…

想成为一名【黑客】,你该如何快速的入门?

假设你有一台个人电脑,或者可以访问一台电脑,那么你就可以着手【黑客】技能的学习了。【黑客】文化演化而来的的时候,电脑是很昂贵的,个人不能拥有他们。所以最重要的一个步骤就是新手可以拥有一台属于自己的电脑,新手…

【Cisco Packet Tracer| 一.交换机配置模式与基本参数配置】

文章目录一.交换机的多种模式以及切换1.如何进入到交换机配置的命令行用户界面(Command Line Interface)2.普通模式模式3.特权用户模式4.全局配置模式5.模式切换图二.交换机名称,口令等设置1.全局模式下-交换机改名2.接口模式下-配置端口速度和工作模式2.1配置端口速…

项目8:用户注册和登录的前后端联调

项目8:用户注册和登录的前后端联调 1.前端项目使用 2.前端项目注册模块 3.后端完成项目注册 4.前端项目登录模块 5.后端完成项目登录 6.用户认证(校验用户是否登录) 项目8:用户注册和登录的前后端联调 1.前端项目使用 直接…

20230413在CV1826平台配置开机自启动程序

20230413在CV1826平台配置开机自启动程序 2023/4/13 10:51 1、项目需求:硬件需要测量摄像头开机之后的电压/时钟信号,但是不想每次开机的时候都通过adb连接cv1826来开启摄像头。 C:\Users\Sun>adb shell / # / # cd /mnt/ /mnt # /mnt # ls -l total …

Go 语言性能优化指南

编写高性能的 Go 程序~ 前言: 继上次课程的高质量编程内容讲解,本次课程主要介绍了在满足正确性、可靠性、健壮性、可读性等质量因素的前提下提高程序效率的性能优化建议;性能优化分析工具;以及性能调优的实战案例,分…

叶酸聚乙二醇羟基FA-PEG-OH;一文带你了解高分子试剂OH-PEG-Folate

FA-PEG-OH,叶酸-聚乙二醇-羟基 中文名称:叶酸聚乙二醇羟基 英文名称:FA-PEG-OH HO-PEG-FA Folate-PEG-OH 性状:黄色液体或固体,取决于分子量 溶剂:溶于水,DMSO、DMF等常规性有机溶剂 活性基…

城市地下综合管廊安全运营与智慧管控的分层架构研究

安科瑞 李亚俊 1、引言 1833年,市政管线综合管廊在巴黎城市地下建成至今,经过百年来的探索、研究、改良和实践,法国、英国、德国、俄罗斯、日本、美国等发达国家的管廊规划建设与安全运维体系已经日臻完善,截止目前,…

《花雕学AI》17:关注提示工程—本世纪最重要的技能可能就是与AI人工智能对话

本文目录与主要结构 引言:介绍提示工程的概念和背景,说明为什么它是本世纪最重要的技能之一。 正文: 一、提示工程的基本原理和方法:介绍什么是提示、如何设计和优化提示、如何使用提示与语言模型进行交互。 二、提示工程的应用和…

Direct3D 12——混合——混合

混合运算 typedef enum D3D12_BLEND_OP {D3D12_BLEND_OP_ADD 1, //添加源 1 和源 2。D3D12_BLEND_OP_SUBTRACT 2,//从源 2 中减去源 1。D3D12_BLEND_OP_REV_SUBTRACT 3,//从源 1 中减去源 2。D3D12_BLEND_OP_MIN 4,//查找源 1 和源 2 的最小值。D3D12_BLEND_OP_MAX 5//查…

【云原生|Docker】13-Docker-compose详解

【云原生Docker】13-Docker-compose详解 文章目录【云原生Docker】13-Docker-compose详解前言docker-compose简介docker-compose安装docker-compose基本示例Docker Compose常用命令说明Docker Compose文件详解versionserviceimagebuildcommandlinksexternal_linksportsexposeen…

Win11的两个实用技巧系列之找不到wifi网络的解决方法、双系统开机选择系统方法

Win11装了VMware后找不到wifi网络的解决方法 有用户在电脑上安装了VMware虚拟机来使用的时候,发现虚拟机中无法进行无线网络的连接了,本文就为大家带来了详细的解决方法,一起看看吧 Win11装了VMware后找不到wifi网络的解决方法教学分享。有用…

助力信创国产化,Solon v2.2.9 发布

Solon 是一个高效的 Java 应用开发框架:更快、更小、更简单。它不是 Spring、没有使用 Servlet、JavaEE 接口,是一个有自己接口标准的开放生态。可以为应用软件国产化提供支持,助力信创建设。 150来个生态插件,覆盖各种不同的应用…

【SSM框架】Spring更简单的存储对象

Spring更简单的存储对象将Bean对象简单存储到Spring容器中使用五大类注解来存储Bean对象使⽤ Controller 存储 bean 对象使⽤ Service 存储 bean 对象使⽤ Repository 存储 bean 对象使⽤ Component 存储 bean 对象使⽤ Configuration为什么要有五大类注解五大类注解的关系五大…

【C++初阶】类与对象(一)

文章目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装1 、访问限定符2.封装五、类的作用域六、类的实例化七、类对象模型1.探究存储方式2.结构体内存对齐规则八、this指针1、this指针的引出2.this指针的特性八、C语言和C实现Stack的对比总…

漏洞挖掘小技巧(一)

Swagger UI反射XSS Swagger UI是目前最流行的RestFul接口API文档和测试工具。 首先写一个 json的 XSS 负载 https://gist.githubusercontent.com/ramkrivas/c47c4a49bea5f3ff99a9e6229298a6ba/raw/e2e610ea302541a37604c7df8bcaebdcb109b3ba/xsstest.json回到Swagger UI&…

轮廓特征属性及应用

轮廓特征属性及应用 1)凸包 凸包(Convex Hull)是一个计算机几何图形学中的概念, 简单来说, 给定二维平面点集, 凸包就是能够将最外层的点连接起来构成的凸多边形, 它能够包含点集中所有的点。物体的凸包检测常应用在物体识别、手势识别及边界检测等领域。 寻找凸包—cv2.co…

数字中国背景下,企业加大数据决策投入,零代码+商业智能成为新选型 | 爱分析洞察

自“十四五”规划将“加快数字化发展,建设数字中国”单独成篇,从国家战略层面明确了数字化转型的重要性,国家层面有关支持数字经济发展的顶层设计与配套政策此后相继出台。2023年3月1日,中共中央、国务院印发了《数字中国建设整体…

一、基础算法7:位运算 模板题+算法模板(二进制中1的个数)

文章目录算法模板求n的第k位数字返回n的最后一位1求一个数x的二进制中1的个数模板模板题二进制中1的个数原题链接题目题解补充输出一个数n的补码x的二进制并按位输出关于原码,反码,补码算法模板 求n的第k位数字 n >> k & 1返回n的最后一位1 …

iOS-关联对象(Objective-C)

关联对象关联对象的应用分类中的 property使用关联对象关联对象的实现objc_setAssociatedObjectAssociationsManager如何存储 ObjcAssociationnew_value ! nilnew_value nilsetHasAssociatedObjects()objc_getAssociatedObjectobjc_removeAssociatedObjects写到最后关于应用关…