二叉树OJ题讲解之一

news2024/11/17 15:42:10

今天我们一起来做一道初级的二叉树OJ题,都是用递归思想解答

力扣965.单值二叉树       链接https://leetcode.cn/problems/univalued-binary-tree/description/

 所谓单值二叉树就是这棵二叉树的所有节点的值是相同的,那我们要做这道题,肯定要把这棵树的所有结点遍历一遍,看看所有结点的值是否相等。那怎么遍历呢?二叉树有前序遍历、中序遍历、后序遍历和层次遍历,对于这道题而言,要看所有结点的值是否相等,无疑前序遍历是最方便的,因为我们只有先检查了根节点的值是一直才能继续遍历左右子树。所以,我们开始解答这道题

我们想,如果这棵树是一棵空树,该怎么处理? 我们认为如果是一棵空树就返回true;

if(root==NULL)
    {
        return true;
    }

接下来走到这里肯定就不为空树,但是左右子树还是有可能一边是空的,那我们分开处理。如果左子树不为空,在这个前提下要是左子树的值等于根节点的值我们返回true,但是我们这样写还是到后面会麻烦,因为只要左子树的值等于根节点的值就true的话,那左子树的左子树呢?后面就不会判断到,所以我们这里还是以不相等的条件进行处理,即

if(root->left!=NULL&&root->left->val!=root->val)
    {
        return false;
    }

同理右子树不为空我们可以写成

if(root->right!=NULL&&root->right->val!=root->val)
    {
        return false;
    }

空树、左右子树都不为空的情况我们都判断了,那走到这里,就是根节点的左右子树都等于根节点的值,那我们就继续以根节点的左子树为根,根节点的右子树为根判断了,并且这两个必须同时满足那才能返回true,即

return isUnivalTree(root->left)&&isUnivalTree(root->right);

我们运行提交,就通过啦

完整代码

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);//左右子树等于根的值,继续下面的左右子树
    
}

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

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

相关文章

sql注入靶场

第一关: 输入:http://127.0.0.1/sqli-labs-master/Less-1/?id1 http://127.0.0.1/sqli-labs-master/Less-1/?id1%27 http://127.0.0.1/sqli-labs-master/Less-1/?id1%27-- 使用--来闭合单引号,证明此处存在字符型的SQL注入。 使用order …

mybatis collection 错误去重

一、需求背景 一条银行产品的需求,不同阶段,可能对应不同的银行(也有可能是同一个银行处理不同的阶段)去处理,如: 发布阶段: —> A银行处理立项阶段: —> B银行处理审核阶段: —> A银行处理出账阶段: —> C银行处理 …

第二十章——多线程

Windows操作系统是多任务操作系统,它以进程为单位。一个进程是一个包含有自身地址的程序,每个独立执行的程序都称为进程。也就是说每个正在执行的程序都是一个进程。系统可以分配给每一个进程有一段有限的使用CPU的时间(也可以称为CPU时间片&…

YOLOv8独家原创改进: AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文全网首发独家改进:可改变核卷积(AKConv),赋予卷积核任意数量的参数和任意采样形状,为网络开销和性能之间的权衡提供更丰富的选择,解决具有固定样本形状和正方形的卷积核不能很好地适应不断变化的目标的问题点,效果秒殺DSConv 1)AKConv替代标准卷积进行…

第二十章总结

继承Thread 类 Thread 类时 java.lang 包中的一个类,从类中实例化的对象代表线程,程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行,任务是指线程在启动时执行的工作,start() 方法启动线程&…

什么是交流负载的特点和特性?

交流负载往往存在不平衡的特性,即三相电流和电压的幅值和相位存在差异。这是由于不同负载的性质和使用情况不同导致的,交流负载的功率因数是描述负载对电网的有功功率需求和无功功率需求之间关系的重要参数。功率因数可以分为正功率因数和负功率因数&…

希尔伯特和包络变换

一、希尔伯特变换 Hilbert Transform,数学定义:在数学与信号处理的领域中,一个实值函数的希尔伯特变换是将信号x(t)与h(t)1/(πt)做卷积,以得到其希尔伯特变换。因此,希尔伯特变换结果可以理解为输入是x(t)的线性时不…

仓库代码迁移,从一个仓库迁移到另一个仓库

A-B 1、在B创建一个新的远程仓库 2、 git clone <原Git仓库地址>git remote add origin1 <新Git仓库地址>git push -u origin1 masterorigin1自定义&#xff0c;上下保持一致

机器视觉中精度和分辨率详解!

在机器视觉中&#xff0c;分辨率作为衡量镜头和工业相机的重要参数&#xff0c;被大家熟知。精度是机器视觉中最核心的参数之一。我们一起来了解下这两个参数以及在实际组合应用中&#xff0c;如何有效匹配镜头分辨率和相机分辨率。 精度需要从多个角度来说明&#xff0c;根据…

免费部署开源大模型 ChatGLM-6B

参考&#xff1a;【大模型-第一篇】在阿里云上部署ChatGLM3-CSDN博客 ChatGLM 是一个开源的、支持中英双语的对话语言模型&#xff0c;由智谱 AI 和清华大学 KEG 实验室联合发布&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。ChatGLM3-6B 更…

家政预约服务管理系统,轻松搭建专属家政小程序

家政预约服务管理系统&#xff0c;轻松搭建专属家政小程序app&#xff1b; 家政服务app开发架构包括&#xff1a; 1. 后台管理端&#xff1a;全面管理家政服务、门店、员工、阿姨信息、订单及优惠促销等数据&#xff0c;并进行统计分析。 2. 门店端&#xff1a;助力各门店及员工…

Windows平台下的oracle 11G-11.2.0.4补丁升级操作指南

序号 文件名称 文件说明 1 p6880880_112000_MSWIN-x86-64_OPatch 11.2.0.3.33 for DB 11.2.0.0.0 (Feb 2022) 用于升级 OPatch 2 DB_PSU_11.2.0.4.220118 (Jan 2022)_p33488457_112040_MSWIN-x86-64 主要补丁文件 注意&#xff1a;请用管理员权限运行文件内命令&#…

涂料行业ERP有哪些?涂料行业ERP怎么样

涂料这类产品的生产、包装、存储、运输等方面有特殊的管理要求&#xff0c;有些涂料企业在辅料、原料、半成品、成品、仓库、加工、设备等方面的管理存在不少问题。 如何清晰掌握库存数据&#xff0c;实时了解和掌握经营情况&#xff0c;减少库存过多带来的资金压力和材料浪费…

【代码】基于卷积神经网络(CNN)-支持向量机(SVM)的分类预测算法

程序名称&#xff1a;基于卷积神经网络&#xff08;CNN&#xff09;-支持向量机&#xff08;SVM&#xff09;的分类预测算法 实现平台&#xff1a;matlab 代码简介&#xff1a;CNN-SVM是一种常用的图像分类方法&#xff0c;结合了卷积神经网络&#xff08;CNN&#xff09;和支…

ubuntu配置免密登录vscode

1、配置免密登录 &#xff08;1&#xff09;在windows系统cmd下运行命令 ssh-keygen 一路回车&#xff0c;将会在C:\Users\用户名\.ssh目录下生成两个文件&#xff1a;id_rsa和id_rsa.pub。如下图所示。 &#xff08;2&#xff09;进入.ssh目录。如果想使用root用户&#xff0…

【刷题笔记】H指数||数组||二分查找的变体

H指数 1 题目描述 https://leetcode.cn/problems/h-index/ 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一…

9位院士Science发表长文:人工智能的进展、挑战与未来

源自&#xff1a;量子位 “人工智能技术与咨询”发布 2023年&#xff0c;海内外9位院士及12位专家在Science《科学》合作期刊Intelligent Computing发表长篇综述论文《智能计算的最新进展、挑战和未来》。文章全面阐述了智能计算的理论基础、智能与计算的技术融…

C#开发的OpenRA游戏之属性SelectionDecorations(12)

C#开发的OpenRA游戏之属性SelectionDecorations(12) 前面分析了显示选择框的指示器类SelectionBoxAnnotationRenderable,它的作用就是画一个四个角的方角。 这个类是在属性SelectionDecorations里调用的,如下: protected override IEnumerable<IRenderable> Rende…

滴滴打车app出现系统异常,已过12小时,部分功能仍未完全恢复

据多地用户反馈&#xff0c;滴滴出行APP无法使用。11月27日深夜&#xff0c;上海、北京、广州等多地滴滴用户反馈&#xff0c;滴滴出行APP无法使用&#xff0c;地图无法加载。 不少网约车司机反映&#xff0c;“滴滴出行”系统出现故障&#xff0c;导致无法接单、定位混乱等情况…

有哪些值得推荐的数据可视化工具?

1 数据可视化工具的种类和应用场景 数据可视化工具的多样性使其能够满足不同用户的需求。一般而言&#xff0c;这些工具可分为开源版和商业版两大类。开源版特点&#xff1a;自由开源&#xff1a; 开源版数据可视化工具通常以免费形式提供&#xff0c;允许用户自由使用和修改源…