二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)

讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏):

抓紧刷题巩固一下了

目录

1.单值二叉树

题目描述

思路1

代码1

思路2

 代码2

2.相同的树

题目描述 

思路

代码

3.二叉树的前序遍历

代码

 思路


1.单值二叉树

965. 单值二叉树 - 力扣(LeetCode)

题目描述

思路1

利用递归:

首先检查根与左右节点的值是否相等,如果不相等就能直接返回false ,都一样就依次进入左右子树开始检查子树。

对于每个节点,它会检查其左子节点和右子节点的值是否与当前节点的值相同,如果不同则返回 false。如果左右子树都满足条件,则继续递归地检查左子树和右子树

递归的终止条件是当遍历到叶子节点时,此时返回 true

代码1

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

思路2

首先检查根节点是否为空,如果为空则直接返回 true

然后,代码会递归地检查左子树和右子树。对于每个节点,它会检查其左子节点和右子节点的值是否与当前节点的值相同,如果不同则返回 false。同时,它也会递归地检查左子树和右子树是否为unival树(一旦不满足条件,直接返回false)

满足了就走到最后,返回true

 代码2

bool isUnivalTree(struct TreeNode* root) {if(root==NULL)//看根{return true;}if(root->left)//左子树不为空就先看左子树符合否{if(root->left->val!=root->val||!isUnivalTree(root->left))return false;}if(root->right)//右子树不为空{if(root->right->val!=root->val||!isUnivalTree(root->right))return false;}return true;
}

2.相同的树

100. 相同的树 - 力扣(LeetCode)

题目描述 

思路

先根和根比,比完再比左子树和右子树

1. 两者都是空时也相等

2. 左节点或右节点一个存在一个不存在返回false;都存在不相等也是false

3.开始递归,都是NULL时返回true或者返回false停止

代码

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


3.二叉树的前序遍历

144. 二叉树的前序遍历 - 力扣(LeetCode)

代码

int TreeSize(struct TreeNode* root)
{return root == NULL ? 0 : 1 + TreeSize(root->left) + TreeSize(root->right);
}void preorder(struct TreeNode* root, int* a, int* i)
{if (root == NULL){return;}a[*i] = root->val;(*i)++;preorder(root->left, a, i);preorder(root->right, a, i);
}int* preorderTraversal(struct TreeNode* root, int* returnSize) {int n = TreeSize(root);*returnSize=n;int* a=(int*)malloc(sizeof(int)*n);int i=0;preorder(root,a,&i);return a;
}

 思路

1.首先题目要求放到malloced的数组里,那就要考虑大小的问题,最后还是运用TreeSize来求一下树里元素的数量比较好,求出来后直接赋值给*returnsize

2.一般使用递归,但是我们已经在函数里面动态开辟了,递归每次调用会消耗很多,最好的办法还是在构建一个函数来进行前置遍历和放入的操作。

3.考虑到参数设置问题,root要有,数组a也要有。那想到需要一个下标才能确保递归时正确放到位置,这个下标还不能在递归函数里面定义,那样没用(都是新的,独立的变量)。

所以要作为参数传入的同时还能保证递归时改变的都是同一个变量那就有两种方法:

  • 全局变量
  • 传入地址:地址虽然也是临时拷贝,但是都是指向同一块区域

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

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

相关文章

C#进行Web API开发时,遇到的常见问题

当使用C#进行Web API开发时,可能会遇到以下一些常见问题: 跨域请求 由于浏览器的同源策略限制,跨域请求可能会引发问题。解决方法可以使用CORS(跨域资源共享)来允许从特定的域名或端口访问你的API。 // 添加CORS中间…

influx v2 cli设置influxdb过期策略

目录 背景解法设置config设置buckets找到需要修改的bucket ID更新bucket保留策略 参考资料 背景 最近刚使用influxdb,需要对某个db设置一个过期策略。由于初次使用,对influx client命令行不熟悉,于是在网上找相关的教程,但是搜到…

pycharm社区版配置flask开发环境

新建配置文件,类型选择Shell Script 设置Execute中flask.exe的路径 设置options :--appflask_app.py run --port5000 --debug 设置working 路径 设置环境变量FLASK_APPflask_app.py;FLASK_ENVdevelopment 注意:FLASK_APPflask_app.py和上…

YOLOv8 损失函数改进 | 引入 Shape-IoU 考虑边框形状与尺度的度量

🗝️改进YOLOv8注意力系列一:结合ACmix、Biformer、BAM注意力机制 论文讲解加入代码本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中具有完整的代码和包含多种更有效加入YOLOv8中的yaml结构,读者可以获取到注意力加入的代码和使用经验,总…

Android Studio 最新版本首次下载和安装以及汉化教程【+第二次安装使用教程】

🌟博主领域:嵌入式领域&人工智能&软件开发 前言:本教程详解首次安装和下载最新版本的Android Studio ,以及汉化教程。另外详解当第二次下载使用时解决遇到的问题。 目录 1.Android Studio 下载 2.Android Studio 首次…

【Unity】优化 if else 和 Switch Case

优化 if else 和 Switch Case z 大量的if else 和 Switch Case会造成代码冗余且消耗性能&#xff0c;可以借用如下方法优化 使用字典进行优化 方法优化&#xff1a; //注册字典&#xff0c;通过Action作为值&#xff0c;然后进行回调 private Dictionary<int, Action<Cha…

Hadoop之mapreduce参数大全-1

1.设置Map/Reduce任务允许使用的最大虚拟内存大小 mapred.task.maxvmem是MapReduce的一个配置参数&#xff0c;用于指定每个Map/Reduce任务允许使用的最大虚拟内存大小&#xff08;以字节为单位&#xff09;。如果一个任务使用的虚拟内存超过了此参数指定的值&#xff0c;则任…

【云计算】云计算概述

1. 云计算概述 1.1 云计算的定义 美国国家标准与技术研究院(NIST)定义 云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c;进入可配置的计算资源共享池(资源包括网络&#xff0c;服务器&#xff0c;存储&#xff0c;应用软件…

Xmind - win10安装破解Xmind2023

Xmind - win10安装破解Xmind2023 1、下载 Xmind下载 提取码:we6i 2、安装 Step 1:双击运行 exe文件 Step 2:忽略最新版本 最近更新选择继续升级至Pro选择取消Step 4:直接选择同意授权

Java线程池最全详解

1. 引言 在当今高度并发的软件开发环境中&#xff0c;有效地管理线程是确保程序性能和稳定性的关键因素之一。Java线程池作为一种强大的并发工具&#xff0c;不仅能够提高任务执行的效率&#xff0c;还能有效地控制系统资源的使用。 本文将深入探讨Java线程池的原理、参数配置…

【python基础】一文搞懂:Python 中轻量型数据库 SQLite3 的用法

一文搞懂&#xff1a;Python 中轻量型数据库 SQLite3 的用法 文章目录 一文搞懂&#xff1a;Python 中轻量型数据库 SQLite3 的用法1 引言2 SQLite3 简介3 基本步骤4 示例代码4.1 连接数据库4.2 创建表4.3 插入数据4.4 查询数据4.5 更新/删除数据4.6 关闭数据库连接 5 实例演示…

java如何使用poi-tl在word文档里面渲染多张图片

1. Poi-tl官网 http://deepoove.com/poi-tl/ 2.引入依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>3.编写Word图片模版 {{?pictures}}{{pictur…

NPN PNP磁性开关区别

自记&#xff1a; 网上有些前后内容是相反的&#xff0c;估计自己就没明白&#xff0c;此为分析后得出结论&#xff0c;看完后可懂 1、NPN&#xff08;源型&#xff09;&#xff1a;当导通时输出低电平 当导通时&#xff0c;信号输出线out和0v线连接&#xff0c;相当于输出低电…

代码随想录算法训练营——数组篇总结

理解数组的逻辑结构与物理结构&#xff0c;数组是存放在连续内存空间上的相同类型数据的集合。数组的删除只能用覆盖经典题目1&#xff1a;二分法&#xff0c;要深刻理解循环不变量法则&#xff0c;这也是写代码的重要法则经典题目2:双指针法&#xff0c;暴力破解两层循环都可以…

OCP NVME SSD规范解读-6.标准日志要求-1

4.8 Log Page Requirements章节在NVMe规范中主要涵盖了设备应支持的日志页面&#xff08;Log Pages&#xff09;的要求。日志页面是存储控制器用于报告内部状态、性能统计和其他关键信息的结构化数据区域&#xff0c;它们对系统管理和故障诊断至关重要。 本文&#xff0c;我们…

即将消失的五种编程语言?

1. Ruby Ruby 在 1999 年发布后立即受到程序员们的热捧&#xff0c;它能够快速构建应用程序的特性给程序员留下了非常深刻的印象。紧随其后&#xff0c;备受欢迎的 Ruby on Rails 框架于 2004 年发布&#xff0c;由于 Ruby 和 Rails 这两个名称在当时几乎成为了同义词&#xf…

行走在深度学习的幻觉中:问题缘由与解决方案

如何解决大模型的「幻觉」问题&#xff1f; 我们在使用深度学习大模型如LLM&#xff08;Large Language Models&#xff09;时&#xff0c;可能会遇到一种被称为“幻觉”的现象。没错&#xff0c;它并不是人脑中的错觉&#xff0c;而是模型对特定模式的过度依赖&#xff0c;这…

24/1/10 qt work

1. 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…

特征工程:图像数据不足时的处理办法

在机器学习中&#xff0c;绝大部分模型都需要大量的数据进行训练和学习&#xff08;包括有监督学习和无监督学习&#xff09;&#xff0c;然而在实际应用中经常会遇到训练数据不足的问题。比如图像分类&#xff0c;作为计算机视觉最基本的任务之一&#xff0c;其目标是将每幅图…

红队打靶练习:TOMMY BOY: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb WEB robots.txt get flag1 get flag2 FTP登录 文件下载 更改代理 ffuf爆破 get flag3 crunch密码生成 wpscan 1、密码爆破 2、登录wordpress ssh登录 get flag4 信息收集 get flag5 信息收集 1、arp …