【Leetcode -872.叶子相似的树 -993.二叉树的堂兄弟节点】

news2024/11/20 14:33:33

Leetcode

  • Leetcode -872.叶子相似的树
  • Leetcode -993.二叉树的堂兄弟节点

Leetcode -872.叶子相似的树

题目:请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。

举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。

示例 1:
在这里插入图片描述

输入:root1 = [3, 5, 1, 6, 2, 9, 8, null, null, 7, 4], root2 = [3, 5, 1, 6, 7, 4, 2, null, null, null, null, null, null, 9, 8]
输出:true

示例 2:
在这里插入图片描述

输入:root1 = [1, 2, 3], root2 = [1, 3, 2]
输出:false

提示:
给定的两棵树结点数在 [1, 200] 范围内
给定的两棵树上的值在 [0, 200] 范围内

思路:创建两个数组 a1,a2 分别存放两棵树的叶子节点,最后依次比较两个数组的值是否相等,相等返回 true,否则返回 false;

		void dfs(struct TreeNode* root, int* a, int* Size)
		{
		    if (root == NULL)
		        return;
		
		    //判断是否是叶子节点
		    if (root->left == NULL && root->right == NULL)
		    {
		        a[(*Size)++] = root->val;
		        return;
		    }
		
		    dfs(root->left, a, Size);
		    dfs(root->right, a, Size);
		}
		
		
		bool leafSimilar(struct TreeNode* root1, struct TreeNode* root2)
		{
		    //创建两个数组,分别存放两棵树的叶子的值
		    int a1[200];
		    int a2[200];
		    int Size1 = 0, Size2 = 0;
		
		    dfs(root1, a1, &Size1);
		    dfs(root2, a2, &Size2);
		
		    //如果两棵树的叶子的长度不一样,返回false
		    if (Size1 != Size2)
		        return false;
		
		    //遍历两个数组,比较对应的叶子节点的值是否相等,不相等就返回false
		    for (int i = 0; i < Size1; i++)
		    {
		        if (a1[i] != a2[i])
		            return false;
		    }
		
		    //最后到这里说明相等,返回true
		    return true;
		}

Leetcode -993.二叉树的堂兄弟节点

题目:在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k + 1 处。

如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。
只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。

示例 1:
在这里插入图片描述

输入:root = [1, 2, 3, 4], x = 4, y = 3
输出:false

示例 2:
在这里插入图片描述

输入:root = [1, 2, 3, null, 4, null, 5], x = 5, y = 4
输出:true

示例 3:
在这里插入图片描述

输入:root = [1, 2, 3, null, 4], x = 2, y = 3
输出:false

提示:
二叉树的节点数介于 2 到 100 之间。
每个节点的值都是唯一的、范围为 1 到 100 的整数。

思路:定义 x 和 y 的 target ,depth ,parent 和 found,分别是 x 或 y 的值;x 或 y 节点所在树的深度;x 或 y 的父节点(假设根节点的父节点是NULL);x 或 y 的查找情况;然后递归树,如果找到值为 x 或 y 的节点就更新 x 或 y 的情况;

		//分别定义 x 的值:x_target;x 所在节点的深度:x_depth;x 节点的父节点:x_parent;是否找到 x 节点:x_found
		int x_target;
		int x_depth;
		struct TreeNode* x_parent;
		bool x_found;
		
		int y_target;
		int y_depth;
		struct TreeNode* y_parent;
		bool y_found;
		
		
		void dfs(struct TreeNode* root, int depth, struct TreeNode* parent)
		{
		    if (root == NULL)
		        return;
		
		    //如果找到值为 x 的节点,就更新 x 的父节点、深度、查找情况
		    if (root->val == x_target)
		    {
		        x_parent = parent;
		        x_depth = depth;
		        x_found = true;
		    }
		
		    //如果找到值为 y 的节点,就更新 y 的父节点、深度、查找情况
		    if (root->val == y_target)
		    {
		        y_parent = parent;
		        y_depth = depth;
		        y_found = true;
		    }
		
		    // 如果两个的查找情况都为 true,提前返回
		    if (x_found && y_found)
		        return;
		
		    //递归其左子树,当前深度加一,下一个节点的父节点
		    dfs(root->left, depth + 1, root);
		
		    // 如果两个的查找情况都为 true,提前返回
		    if (x_found && y_found)
		        return;
		
		    //递归其右子树,当前深度加一,下一个节点的父节点
		    dfs(root->right, depth + 1, root);
		}
		
		
		bool isCousins(struct TreeNode* root, int x, int y)
		{
		    //初始化
		    x_target = x;
		    y_target = y;
		
		    x_found = false;
		    y_found = false;
		
		    //三个参数分别为根节点,深度,当前节点的父节点(假设第一个节点的父节点为NULL)
		    dfs(root, 0, NULL);
		
		    //最后判断 x 和 y 节点的深度是否相等,并判断它们的父节点是否相同
		    return x_depth == y_depth && x_parent != y_parent;
		}

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

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

相关文章

C++ 文件和流

我们已经使用了 iostream 标准库&#xff0c;它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。 本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C 中另一个标准库 fstream&#xff0c;它定义了三个新的数据类型&#xff1a; 数据类型描述of…

React createContext优化方案contextType

我们先来看个这样的组件 import React,{createContext} from "react"const ThemeContext createContext();export default class Demo14 extends React.Component {constructor(props){super(props);this.state {theme:"red"}}render(){const { theme }…

划片机QFN封装工艺流程揭秘及芯片切割分离技术及工艺应用

QFN封装工艺流程包括以下步骤 磨片&#xff1a;对晶圆厂出来的圆片进行减薄处理&#xff0c;方便在有限的空间中进行封装。 划片&#xff1a;将圆片上成千上万个独立功能的芯片进行切割分离。 装片&#xff1a;将芯片装入QFN封装壳中。 焊线&#xff1a;将芯片与壳体上的引…

Java——《面试题——Redis篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

c++11 标准模板(STL)(std::basic_streambuf)(八)

定义于头文件 <streambuf> template< class CharT, class Traits std::char_traits<CharT> > class basic_streambuf; 类 basic_streambuf 控制字符序列的输入与输出。它包含下列内容并提供到它们的访问&#xff1a; 1) 受控制字符序列&#xff0…

hadoop-hdfs分布式文件系统理论(一)

为什么要开发HDFS分布式文件系统 可以更好的支持分布式计算。 hadoop distribute file system是一个分布式 文件系统&#xff0c;操作的是文件&#xff0c;增、删都是以文件为单位。 存储模型 文件线性按字节切割成块&#xff08;block&#xff09;&#xff0c;具有offset&a…

驱动开发:取进程模块的函数地址

在笔者上一篇文章《驱动开发&#xff1a;内核取应用层模块基地址》中简单为大家介绍了如何通过遍历PLIST_ENTRY32链表的方式获取到32位应用程序中特定模块的基地址&#xff0c;由于是入门系列所以并没有封装实现太过于通用的获取函数&#xff0c;本章将继续延申这个话题&#x…

【UE5 Cesium】03-Cesium for Unreal 添加本地数据集

上一篇&#xff1a;【UE5 Cesium】02-Cesium for Unreal 添加在线数据集 步骤 1. 在官网&#xff08;Adding Datasets – Cesium&#xff09;上下载一个示例 下载的是一个名为“Tileset.zip”的压缩文件 解压后文件内容如下 2. 打开虚幻编辑器&#xff0c;点击“Blank 3D Tiles…

macOS Ventura 13.5beta4(22G5059d)发布

系统介绍 黑果魏叔 6 月 28 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 4 更新&#xff08;内部版本号&#xff1a;22G5059d&#xff09;&#xff0c;本次更新距离上次发布隔了 12 天。 macOS Ventura 带来了台前调度、连续互通相机、F…

Spring Boot + Vue3前后端分离实战wiki知识库系统<九>--文档管理功能开发一

接着Spring Boot Vue3前后端分离实战wiki知识库系统&#xff1c;八&#xff1e;--分类管理功能开发二继续往下&#xff0c;这次咱们则来到文档管理功能的开发学习了&#xff0c;对于知识库的核心功能当然得是能发表文章及查看对吧&#xff0c;所以接下来一步一个脚印来完成它&…

Linux CentOS_7.9卸载Oracle适用于多版本(亲测验证)

前言&#xff1a;近期安装测评的比较多&#xff0c;在完成使命后还是可以按部就班形成个B环&#xff0c;这里主要是记录Linux卸载Oracle&#xff0c;下述方法适用于Oracle 11g&#xff0c;Oracle 12c&#xff0c;Oracle 19g版本的数据库&#xff0c;我们这边以CentOS_7.9、Orac…

C语言进阶教程(include只能包含.h文件吗?)

文章目录 前言一、include工作原理二、include只能包含.h文件吗三、include包含文件时<>和""的区别总结 前言 include在多文件编程中是非常重要的&#xff0c;我们经常使用他来包含一些头文件&#xff0c;方便我们管理代码和项目&#xff0c;那么include是只能…

《计算机系统与网络安全》 第八章 操作系统安全基础

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Linux文件的权限

1.Linux文件的权限 linux文件的权限可以分为四类&#xff1a;可读、可写、可执行、没有权限。分别用字符r、w、x、- 表示。 2. 用户与用户组 Linux是一个多用户多任务的操作系统&#xff0c;可以通过用户和用户组来更好的控制文件的权限。 每个文件都有一个拥有者&#xff08…

能在图片上涂鸦的软件有哪些?分享几种好用涂鸦工具

涂鸦可以增加趣味性。在照片上涂鸦可以增加趣味性&#xff0c;让照片更加有趣。无论是在旅行照片中添加一些有趣的涂鸦&#xff0c;还是在生活照片中添加一些幽默的涂鸦&#xff0c;都可以让照片更具有趣味性。很多小伙伴不清楚怎么在照片上进行涂鸦&#xff0c;下面给大家分享…

【JSP】使用 JSTL 增强 JSP 功能

本文仅供学习参考&#xff01; JSTL 代表 JavaServer Pages Standard Tag Library;它提供了一组核心网页功能&#xff0c;可以执行许多基本任务&#xff0c;例如结构元素的条件和迭代、操作 XML 文档以及支持国际化标记以更复杂的 SQL 元素处理。JSP以scriples而闻名&#xff0…

Apache Struts是什么?高效实现应用程序控制器

目录 一、Apache Struts是什么 二、如何使用Apache Struts 三、Apache Struts的优势和作用 一、Apache Struts是什么 Apache Struts是一个基于Java的Web应用程序框架&#xff0c;它通过MVC&#xff08;模型-视图-控制器&#xff09;体系结构来实现应用程序控制器。Struts框…

如何沉淀企业内部的知识体系?

在当今竞争激烈的商业环境下&#xff0c;企业内部的知识是一项宝贵的资产。有效地沉淀企业内部的知识体系&#xff0c;可以帮助企业提高创新能力、加强竞争优势&#xff0c;并为员工学习和发展提供良好的资源。本文将介绍如何在企业中建立和沉淀知识体系&#xff0c;以促进知识…

聊聊程序员必备的软技能——情绪管理

我之前经常提到一句话&#xff1a;大多数时候所谓的“技术之玻璃天花板”&#xff0c;其实只是缺乏软技能而已。 所以粉丝朋友们&#xff0c;我们除了需要关注技术&#xff0c;更需要注重软技能的提高。 今天写的这篇是情绪管理。 文章目录&#xff1a; 01 前言 其实我一开…

6.1.3 关于可执行文件路径的变量:$PATH

查阅文件属性的指令ls完整文件名为&#xff1a;/bin/ls&#xff08;绝对路径&#xff09;。 当我们在执行一个指令的时候&#xff0c;系统会依照PATH的设置去每个PATH定义的目录下搜寻文件名为ls的可可执行文件&#xff0c;如果在PATH定义的目录中含有多个文件名为ls的可可执行…