二叉树题目:单值二叉树

文章目录

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

题目

标题和出处

标题:单值二叉树

出处: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.hqwc.cn/news/1296.html

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

相关文章

【Solr】中文分词配置

提示&#xff1a;在设置中文分词前需确保已经生成过core&#xff0c;未生成core的可以使用&#xff1a;solr create -c "自定义名称"进行定义。 未分词前的效果预览&#xff1a; 下载分词器&#xff1a; 下载地址: https://mvnrepository.com/artifact/com.github.m…

网络安全能力成熟度模型介绍

一、概述 经过多年网络安全工作&#xff0c;一直缺乏网络安全的整体视角&#xff0c;网络安全的全貌到底是什么&#xff0c;一直挺迷惑的。目前网络安全的分类和厂家非常多&#xff0c;而且每年还会冒出来不少新的产品。但这些产品感觉还是像盲人摸象&#xff0c;只看到网络安…

python spider 爬虫 之 解析 xpath 、jsonpath、BeautifulSoup (三)

BeautifulSoup 简称&#xff1a;bs4 BeautifulSoup跟lxml 一样&#xff0c;是一个html文档的解析器&#xff0c;主要功能也是解析和提取数据 优缺点 缺点&#xff1a;效率没有lxml的效率高 优点&#xff1a;接口接口人性化&#xff0c;使用方便 延用了css选择器 安装Beautifu…

项目——学生信息管理系统2

目录 用户类型&#xff0c;我们创建一个枚举类 在 org.xingyun.model 包下创建 UserType 枚举类 快速生成 get set 方法 修改代码&#xff0c;下拉框的内容&#xff0c;用我们的枚举类型 给登录按钮绑定事件 我们在 org.xingyun.utils 包下创建一个工具类 Eclipse 智能提…

四年之约不负等待,耕升 GeForce RTX 4060 踏雪+DLSS 3实现百帧玩光追

昨日&#xff0c;耕升正式发布了GeForce RTX 40系列的最新成员耕升 GeForce RTX 4060 追风。作为NVIDIA密切合作的核心AIC合作伙伴耕升&#xff0c;也将在今日为玩家带来了更多耕升GeForce RTX 40系列成员——耕升 GeForce RTX 4060 踏雪。作为耕升 GeForce RTX 4060系列中的双…

Axure教程—上传文件

本文介绍用Axure制作文件上传效果 预览 预览地址&#xff1a;https://6q4of2.axshare.com 功能 1、点击”文件上传“按钮&#xff0c;显示上传的文件 2、点击”删除“图片&#xff0c;显示提示”是否要删除“&#xff0c;点击”是“&#xff0c;删除数据&#xff0c;点击”否…

基于Java人力资源管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

树形控件父节点不选中,只能选中子节点,如何实现?

rTree 树形控件一级菜单没有复选框&#xff0c;子菜单有复选框&#xff0c;如何实现&#xff1f;_阿 尭的博客-CSDN博客 接上一篇博客&#xff0c;继续深入功能&#xff0c;如何只选中叶子节点而不选中父节点。 1.在节点被点击时的回调&#xff0c;node-click中&#xff0c;返…

什么是域控服务器?域控服务器功能?部署域控需要考虑因素?域控组策略功能?

一、什么是域控制服务器&#xff1f; 域控制器&#xff08;Domain Controller&#xff09;是在Windows Server操作系统上运行的一个服务角色&#xff0c;它用于管理和控制一个或多个计算机的安全策略、用户身份验证和授权等任务。域控制器通常是用于企业网络中的主要身份验证和…

「C/C++」C++类与类的关系(UML类图+代码说明)

✨博客主页&#xff1a;何曾参静谧的博客 &#x1f4cc;文章专栏&#xff1a;「C/C」C/C学习 相关术语 &#x1f3af;依赖关系&#xff08;Dependency&#xff09;&#xff1a;表示一个类的实现需要另一个类的协助&#xff0c;虚线箭头&#xff0c;箭头指向被依赖的类。 &#…

简要介绍 | 基于Diffusion model的图像生成和重建

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对基于Diffusion model的图像生成和重建进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 基于Diffusion model的图像生成和重建 What are Stable Diffusion Models and Why are they a Step Forw…

泰坦尼克号幸存者预测

本文所有的代码及数据均存放与https://github.com/MADMAX110/Titanic 泰坦尼克号幸存者预测挑战赛是一个非常受欢迎的机器学习实践项目。这是 Kaggle.com 上最受欢迎的比赛之一。 数据中有3个文件:train.csv&#xff0c;test.csv&#xff0c;和gender_submit .csv。 train.csv包…