二叉树OJ题:LeetCode--965.单值二叉树

news2025/2/22 2:31:36

朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第965道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

数据结构与算法专栏:数据结构与算法

个  人  主  页 :stackY、

C 语 言 专 栏C语言:从入门到精通

LeetCode--965.单值二叉树: https://leetcode.cn/problems/univalued-binary-tree/

目录

1.题目介绍

2.实例演示

3.解题思路


1.题目介绍

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false

2.实例演示

3.解题思路

在此之前我们先来了解一下关于二叉树的一些基本的知识:二叉树的遍历

1. 前序遍历-->根节点、左子树、右子树

2. 中序遍历-->左子树、根节点、右子树

3. 后序遍历-->左子树、右子树、根节点

4. 层序遍历-->一层一层逐步遍历(借助于队列实现)

以上实现方法可以参考:二叉树的链式结构

要判断一颗树的所有结点都是同一个值(单值二叉树),首先想到的方法就是逐一遍历各各结点,然后进行比较判断,但是遍历求解二叉树的问题很容易出现错误,由于二叉树的问题最终都要归结为每一棵树的子问题,所以我们需要采用转化子问题的方法:

在这里需要注意一个问题:如果一棵树为空树,符不符合单值二叉树的条件呢?答案是符合的,因为空树的根和它的左右子树都是空,符合单值的条件。不为空树的话,如果它的左右子树都存在,并且左右子树的结点和根节点的值一样,那么再判断它的左右子树的左右子树,如果不一样,那么直接返回false......这样子以此类推,直到访问完整个二叉树。

代码演示:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


bool isUnivalTree(struct TreeNode* root){
    //判断是否为空树
    if(root == NULL)
    {
        return true;
    }
    //不为空树
    //左右子树不为空且结点的值不相等直接返回
    if(root->left && root->left->val != root->val)
    {
        return false;
    }
    if(root->right && root->right->val != root->val)
    {
        return false;
    }
    //若相等,则继续判断左右子树
    return isUnivalTree(root->left)
        && isUnivalTree(root->right);
}

代码图解:

注意:函数递归这里的返回值并不是一次性的返回到最外面,而是返回到上一层,一层一层的往上一层返回。

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持! 

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

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

相关文章

python旅游推荐系统-计算机毕设 附源码82884

旅游推荐系统 摘 要 随着社会的快速发展和人们生活水平的不断提高,旅游已逐渐成为人们生活的重要组成部分,用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时,也淹没了用户真正感兴趣的信息。为…

二十三种设计模式第十一篇--桥接模式

好久没写博客了,自从进入6月份,毕业季,全是在忙毕业的事情,都没怎么学习代码软件工程知识了,这二十三种设计模式还是得学完哈!持之以恒,我本来为了学这二十三种设计模式的初衷是为了顺利度过软考…

Azkaban的安装教程

Azkaban的安装教程 文章目录 Azkaban的安装教程写在前面集群模式安装下载安装包上传 **tar** 包解压配置 **MySQL**配置 **Executor Server**编辑 azkaban.properties同步 azkaban-exec到所有节点启动 executor server激活 executor **配置** **Web Server**编辑 azkaban.prope…

短视频seo源码搭建技术分享

一、目录及主要文件说明 bootstrap目录,存放框架引导及启动文件,非底层改动,无需修改。其中的functions.inc中可以定义一些全局函数error目录,存放404、500等常见错误模板文件,非需勿动includes目录,drupal…

SpringBoot 如何使用 JProfiler 进行性能测试

SpringBoot 如何使用 JProfiler 进行性能测试 在 SpringBoot 应用程序中,我们可以使用 JProfiler 进行性能测试。JProfiler 是一款专业的 Java 性能分析工具,可以帮助我们识别和解决应用程序的性能问题。使用 JProfiler 可以让我们更加准确地测试代码的…

C语言进阶教程(字符串深入)

文章目录 前言一、字符数组赋值注意事项二、混淆点三、字符串字面量和字符数组的区别四、字符串长度总结 前言 其实在C语言中是没有真正的字符串的,在C语言中字符串都是使用字符数组来完成的。 一、字符数组赋值注意事项 在C语言中,字符数组&#xff…

[RocketMQ] Producer生产者启动源码 (五)

DefaultMQProducer的关系图: 文章目录 1.创建DefaultMQProducer实例2.start启动生产者2.1 getOrCreateMQClientInstance获取或者创建MQClientInstance2.2 registerProducer注册生产者2.3 start启动MQClientInstance2.4 startScheduledTask启动各种定时任务2.4.1 updateTopicRou…

【Linux】切换内核版本(Centos)

1.查看服务器已安装的所有内核版本 awk -F\ $1"menuentry " {print i " : " $2} /etc/grub2.cfg0 : CentOS Linux (3.10.0-1160.83.1.el7.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.80.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-1127.el7.…

求最小函数依赖集(例题讲解)超详细,易理解

在关系R<U,F>中&#xff0c;UABCDEG F{BG->C&#xff0c;BD->E,DG->C,ADG->BC,AG->B,B->D} 先进行第一大步&#xff1a; 先看右边&#xff1a; 如果有BG->C,G-->C,因为单G就可以推出C了就不需要BG--->C了&#xff0c;可以把BG--->C这个…

Segment Anything Model(SAM)

Segment Anything Model&#xff08;SAM&#xff09;是Facebook Research近来开源的一种新的图像分割任务、模型。Segment Anything Model&#xff08;SAM&#xff09;可以从输入提示&#xff08;如点或框&#xff09;生成高质量的对象掩模&#xff0c;并可用于生成图像中所有对…

1、一条 SQL 查询语句是如何执行的?

基础篇 第一课、一条 SQL 查询语句是如何执行的&#xff1f; 下面是 MySQL 的基本架构示意图&#xff0c;从中可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存…

AI近十年盘点:纵览AI发展历程,探寻AI未来走向

编者按&#xff1a;当我们回顾过去十年的人工智能发展历程时&#xff0c;可以看到一场现在还正在进行的变革&#xff0c;对我们的工作方式、商业运营模式和人际交往行为都产生了深远的影响。从2013年的AlexNet到变分自编码器&#xff0c;再到最近的生成式大模型&#xff0c;人工…

Vue 2 - 常见面试题汇总大全

文章目录 一 基础知识1.vue 的生命周期1-1 钩子函数1-2 钩子函数的使用方法1-3 父子组件生命周期构造函数执行顺序 2 v-show 与 v-if v-for2-1.v-show 与 v-if 的区别2-2 v-if 和v-for的优先级 3.组件通信有哪些方式&#xff1f;4 computed和watch &#xff0c;有什么区别4-1.c…

西门子S7-1200定时器

一、西门子S7-1200定时器介绍 S7-1200的定时器为IEC定时器&#xff0c;用户程序中可以使用的定时器数量仅仅受CPU的存储器容量限制。 使用定时器需要使用定时器相关的背景数据块或者数据类型为IEC_TIMER&#xff08;或TP_TIME、TON_TIME、TOF_TIME、TONR_TIME&#xff09;的D…

别再弄混流程挖掘、BPM和BI

信息时代以来&#xff0c;各类信息系统不仅在企业中得到了广泛的应用和普及&#xff0c;种类和选择伴随全球数字技术的发展也逐渐变得丰富多样。而随着数字化转型的不断深入&#xff0c;企业对系统管理的需求面临着全新的变化。 如何配置最适合当下业务的系统&#xff1f;这个…

Axure教程——图片轮播(纵向滚动)

本文介绍的时用Axure中的动态面板制作图片轮播之纵向滚动 一、预览效果 预览地址&#xff1a;https://c1s4i1.axshare.com 二、功能描述 图片纵向自动滚动播放 三、元件制作 拖入一个动态面板&#xff0c;命名为1&#xff0c;设置大小为375*155&#xff0c;并设置四个状态&…

文科生从0学Python转数据分析学习建议避坑指南

我本科是财务管理&#xff0c;文科专业&#xff0c;零基础学习Python转行数分后&#xff0c;现在我的日常工作都离不开它。 接下来&#xff0c;给各位跟我一样无编程经验的朋友一些学习的建议 目标导向&#xff1a;先搞清楚为啥要学 Python几乎可以做任何事&#xff0c;但我…

2023汽车供应链大会暨爱普搜采购商交流会

2023汽车供应链大会暨爱普搜采购商交流会 Automotive Supply Chain Conference & APSOTO Purchasing Exchange Meeting 补链强链 绿色发展--打造中国汽车供应链新生态 北京是我国汽车工业重地之一&#xff0c;产业实力雄厚&#xff0c;发展强劲。北京车企及零部件公司分布…

springboot高校宿舍报修管理系统计算机毕设 附源码83946

springboot高校宿舍报修管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实…

VUE L 事件处理 ⑤

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs E v e n t j s Eventjs Eventjs总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ ⡖⠒⠒⠒⠤⢄⠀⠀⠀…