二叉树题目:单值二叉树

news2025/1/13 7:58:27

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法一
    • 思路和算法
    • 代码
    • 复杂度分析
  • 解法二
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:单值二叉树

出处:965. 单值二叉树

难度

3 级

题目描述

要求

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

给定二叉树的根结点 root \texttt{root} root,如果给定的树是单值二叉树,返回 true \texttt{true} true,否则返回 false \texttt{false} false

示例

示例 1:

示例 1

输入: root   =   [1,1,1,1,1,null,1] \texttt{root = [1,1,1,1,1,null,1]} root = [1,1,1,1,1,null,1]
输出: true \texttt{true} true

示例 2:

示例 2

输入: root   =   [2,2,2,5,2] \texttt{root = [2,2,2,5,2]} root = [2,2,2,5,2]
输出: false \texttt{false} false

数据范围

  • 树中结点数目在范围 [1,   100] \texttt{[1, 100]} [1, 100]
  • 0 ≤ Node.val < 100 \texttt{0} \le \texttt{Node.val} < \texttt{100} 0Node.val<100

解法一

思路和算法

根据单值二叉树的定义可知,只要所有结点值都和根结点值相同,则是单值二叉树,只要有一个结点值和根结点值不同,则不是单值二叉树。因此可以遍历二叉树并判断每个结点值是否和根结点值相同。

深度优先搜索的做法是,首先判断根结点的左子结点和右子结点是否存在,如果子结点存在则遍历相应的子树,对于每个访问的结点,判断结点值是否和根结点值相同。

由于二叉树的结构具有递归性,因此可以使用递归实现深度优先搜索,从根结点开始递归搜索。

递归的终止条件是当前结点的左右子结点都为空,即当前结点是叶结点,此时以当前结点为根结点的子树是单值二叉树。

对于其余情况,首先对当前结点的左右子结点进行判断,然后执行递归。

  1. 如果当前结点的左子结点存在但是左子结点值和当前结点值不同,或者当前结点的右子结点存在但是右子结点值和当前结点值不同,则以当前结点为根结点的子树不是单值二叉树,原始二叉树也不是单值二叉树。

  2. 如果当前结点的左右子结点符合单值二叉树的要求,即子结点不存在或子结点存在且子结点值和当前结点值相同,则对子树执行递归。

    • 如果当前结点的左子结点存在,则对左子树执行递归,判断左子树中的每个结点值是否等于左子结点值。

    • 如果当前结点的右子结点存在,则对右子树执行递归,判断右子树中的每个结点值是否等于右子结点值。

代码

class Solution {
    public boolean isUnivalTree(TreeNode root) {
        if (root.left == null && root.right == 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 (root.left == null || isUnivalTree(root.left)) && (root.right == null || isUnivalTree(root.right));
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是递归调用的栈空间,取决于二叉树的高度,最坏情况下二叉树的高度是 O ( n ) O(n) O(n)

解法二

思路和算法

也可以使用广度优先搜索遍历二叉树,判断每个结点值是否和根结点值相同。

广度优先搜索需要使用队列存储结点。初始时将根结点入队列,遍历过程中,每次将一个结点出队列,执行如下操作。

  1. 如果当前结点值和根结点值不同,则二叉树不是单值二叉树。

  2. 如果当前结点值和根结点值相同,则得到当前结点的左右子结点,并将非空子结点入队列。

当队列为空时,遍历结束,如果所有结点值都和根结点值相同,则是单值二叉树。

代码

class Solution {
    public boolean isUnivalTree(TreeNode root) {
        Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();
            if (node.val != root.val) {
                return false;
            }
            if (node.left != null) {
                queue.offer(node.left);
            }
            if (node.right != null) {
                queue.offer(node.right);
            }
        }
        return true;
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是队列空间,队列内元素个数不超过 n n n

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

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

相关文章

Matlab 校正镜头畸变图像

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 生活中一些针孔相机会给图像带来严重的失真,这主要是由于硬件和环境的因素所示导致的,其中主要的两种畸变是径向畸变和切向畸变。 径向畸变会导致直线看起来弯曲,即点距离图像中心越远,径向畸变就越大。例如,下…

hyperf 学习 一、搭建

docker中ubuntu容器php语言hyperf框架开发环境搭建。 docker地址&#xff1a;Docker tag:20.04 docker pull ubuntu:20.04docker run --name hyperf -v D:\workspace\docker\hyperf:/wj/hyperf -p 9501:9501 -it --privileged -u root --entrypoint /bin/sh ubuntu:20.04步骤…

聊聊ChatGPT是如何组织对话的

为什么要组织对话&#xff1f; 总所周知&#xff0c;ChatGPT的训练大致可分为下图中展示的几个阶段&#xff0c;其中&#xff0c;在Pretraining阶段&#xff0c;模型的训练数据是纯文本&#xff0c;目标是根据上文预测下一个token&#xff0c;而在后面的几个阶段中&#xff0c…

16年38款,iPhone中的哪一款有最深的印象?

6月29日是一个重要的日子&#xff0c;对于智能手机领域来说尤其如此。在16年前的今天&#xff0c;乔布斯发布了第一代iPhone手机&#xff0c;这个举动彻底改变了世界&#xff0c;智能手机从此成为我们日常生活中不可或缺的一部分。 我特意调查了一下&#xff0c;苹果在过去的16…

RocketMQ on openEuler 提供高性能消息队列的稳定性解决方案

RocketMQ on openEuler&#xff0c;是一种将 RocketMQ 消息中间件通过容器化的方式部署在 openEuler 操作系统上运行&#xff0c;借助 openEuler 系统对于 OS 缓存回收效率增强的内核特性&#xff0c;提升消息中间件在面向超大规模高并发、高吞吐量、低延迟场景下稳定性和可靠性…

git常用命令之远程仓库别名

12. 远程仓库别名 12.1 查看远程仓库名称 命令作用git remote查看关联的远程分支$ git remoteorigingit remote -v查看本地仓库关联的远程仓库信息$ git remote -vorigin gitgithub.com:kaku/reading-note-tutorails.git (fetch)origin gitgithub.com:kaku/reading-note-tuto…

Telnet实验、AAA认证实验、 配置文件备份和还原实验

Telnet实验 拓扑 需求 R1远程R2 配置步骤 1&#xff09;配置接口的IP地址 2&#xff09;在R2设备配置telnet远程 3&#xff09;使用R1远程R2 配置命令 第一步&#xff1a;配置R1的IP地址 <Huawei>un t m //关闭消息 <Huawei>sys //进入系统视图 [Huaw…

量化知识点

1&#xff1a;模型量化是将浮点数替换成整数&#xff0c;并进行存储和计算的方法。 原始float数据量化后int数据量化公式 2&#xff1a;非饱和方式量化、饱和方式量化&#xff0c;对称量化、非对称量化&#xff0c;区别与关系是&#xff1f; 这个是tensorRT的量化方案&#xf…

React hooks文档笔记(三) 状态

状态 一、如何设计组件状态的步骤二、状态构造原则1. 组相关状态2. 避免矛盾/互斥状态3. 避免多余状态4. 不要把props放进state&#xff0c;除非你特别想要阻止更新 三、状态保存/重置1. 相同位置的相同组件保留状态2. 同一位置不同元素reset状态 一、如何设计组件状态的步骤 …

如何使用ChatGPT的API(一)大语言模型如何工作

这篇文章介绍大语言模型的一些概念&#xff0c;包括它是如何工作的&#xff0c;什么是Token等等。 大语言模型如何工作 我们从一个示例开始说起。 当我们写一个提示“我喜欢吃”&#xff0c;然后要求一个大型语言模型根据这个提示填写后面可能的内容。它可能会说&#xff0c…

《PyTorch深度学习实践》第三讲 梯度下降

b站刘二大人《PyTorch深度学习实践》课程第三讲梯度下降笔记与代码&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p3&vd_sourceb17f113d28933824d753a0915d5e3a90 上一讲例子中&#xff0c;初始权重 w w w是随机给的&#xff0c;然后计算每个样本 x x x的预测…

JavaWeb 笔记-1

JavaWeb 笔记-1 初始JavaWeb什么是JavaWeb 一、JDBC1.1、JDBC简介1.2、API详解-DriverManager1.3、API详解-Connection1.4、API详解-Statement1.5、API详解-ResultSet1.6、API详解-PreparedStatement1.6.1、API详解-PreparedStatement-SQL注入演示1.6.2、API详解-PreparedState…

RK3568平台开发系列讲解(外设篇)RFID 模块调试

🚀返回专栏总目录 文章目录 一、RFID 工作原理二、硬件连接三、驱动程序四、设备树五、测试程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 RFID 模块调试。 一、RFID 工作原理 射频识别技术也就是 RFID,英文名为 Radio Frequency Identificati…

玻璃活动隔断安装需要注意什么

随着社会的发展和人们对空间利用的要求不断提高&#xff0c;玻璃活动隔断逐渐成为办公室和商业空间中常见的装修选择。玻璃活动隔断不仅可以有效分割空间&#xff0c;提供私密性&#xff0c;还能保持充足的采光和视觉效果。然而&#xff0c;为了确保玻璃活动隔断的安装质量和使…

PSP - MetaPredict 预测蛋白质序列的内源性无序区域 (Intrinsically Disordered Regions)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131461900 MetaPredict 算法简介&#xff1a; 内源性无序区域&#xff08;IDRs&#xff09;在所有生命领域中都普遍存在&#xff0c;并…

【GPT】如何拥有离线版本的GPT以及部署过程中的问题

【背景】 目前很多公司由于数据安全的问题&#xff0c;不能使用OpenAI的GPT&#xff0c;同时也没有必要非得使用如此泛用化的GPT。很多公司因此有训练自己的离线GPT的需求&#xff0c;这样的GPT只需要具备专业知识即可。 要使这个成为可能&#xff0c;首先就需要能够让GPT的Mo…

InstructGPT学习

GPT发展历程 在回答这个问题之前&#xff0c;首先要搞清楚ChatGPT的发展历程。 GPT-1用的是无监督预训练有监督微调。GPT-2用的是纯无监督预训练。GPT-3沿用了GPT-2的纯无监督预训练&#xff0c;但是数据大了好几个量级。InstructGPT在GPT-3上用强化学习做微调&#xff0c;内…

企业邮箱如何将一个用户设置到多个部门/群组

1、使用管理员账号postmaster登录企业邮局&#xff0c;点击“邮局管理”。 2、点击“组织与成员”。 3、勾选需要设置的用户&#xff0c;点击“设置所属部门/群”。&#xff08;例如&#xff1a;我们需要将所属销售分公司的高阳&#xff0c;加入到以下四个分销部中&#xff0c;…

Hive on Zeppelin

** Hive on Zeppelin ** 官网&#xff1a;zeppelin.apache.org 做大数据的人应该对Hive不陌生&#xff0c;Hive应该是大数据SQL引擎的鼻祖。历经多个版本的改进&#xff0c;现在的Hive3已经具备比较完善的ACID功能&#xff0c;能够同时满足交互式查询和ETL 两种场景。 那怎…

Linux内核的编译、安装、调试

这里写目录标题 编译安装内核下载内核安装依赖更改.config编译内核安装首先安装模块安装内核更改引导更改grub重启 其他操作清理内核源目录卸载安装的内核修改内核配置菜单实现对新加入内核源码的控制 常见问题1. Module.symvers is missing2. No rule to make target ‘debian…