leetCode二叉树的堂兄弟节点

news2024/9/25 11:22:50

题目描述

在二叉树中,根节点位于深度 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
993. 二叉树的堂兄弟节点

解答思路

本题是一道简单题,本身的测试用例较为简单,本身思路也比较清晰,主要依靠bfs进行搜索,因为是求解堂兄弟,所以我们使用bfs可以很快的求解同一层的兄弟,再遍历过程中是事先判断两个值是否是亲兄弟,而后遍历过程中按层次遍历,如果出现目标数字就将+1,如果出现s==1说明不在同一层,s==2说明成功找到即可返回true。

代码如下

class Solution {
    public boolean isCousins(TreeNode root, int x, int y) {
        return bfs(root,x,y);
    }
    public boolean bfs(TreeNode root,int x,int y){
            Queue<TreeNode> q=new LinkedList<TreeNode>();
            if(root.val==x||root.val==y)//首节点不可能有堂兄弟
                return false;
            q.add(root);
            while(!q.isEmpty()){
                int s=0;
                int n=q.size();//判断层次
                while(n--!=0){
                    TreeNode t=q.poll();
                    if(t.left!=null)
                        q.add(t.left);
                    if(t.right!=null)
                        q.add(t.right);
                    if((t.left!=null&&t.right!=null)&&(t.left.val==x&&t.right.val==y||t.left.val==y&&t.right.val==x)){//事先判断
                        return false;
                    }
                    if(t.val==x||t.val==y){//标记
                        s++;
                    }
                }
                if(s==1)
                    return false;
                else if(s==2)
                    return true;
            }
            return false;
    }
}

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

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

相关文章

(十七)springboot实战——spring securtity的授权流程源码解析

前言 本节内容是关于spring security安全框架授权流程的源码分析&#xff0c;spring security的授权流程主要是在FilterSecurityInterceptor过滤器中实现的。我们会通过源码层级的分析&#xff0c;了解清楚spring security的底层是如何实现用户授权的。 正文 1.配置一个请求…

AdaBoost算法

Boosting是一种集成学习方法&#xff0c;AdaBoost是Boosting算法中的一种具体实现。 Boosting方法的核心思想在于将多个弱分类器组合成一个强分类器。这些弱分类器通常是简单的模型&#xff0c;比如决策树&#xff0c;它们在训练过程中的错误会被后续的弱分类器所修正。Boosti…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Span组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Span组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Span组件 鸿蒙&#xff08;HarmonyOS&#xff09;作为Text组件的子组件&#xff0…

数模.matlab画图

一、mesh函数 上图是平常用到的方式 例题&#xff1a; 上图的meshgrid函数相当于上上图的前三个指令&#xff08;temp&#xff0c;x,y&#xff09; mash函数&#xff1a; mashc函数&#xff1a; mashz函数&#xff1a; 上图subplot函数的作用是将下标为index的图片放到对应的x&…

寒假作业-day6

简易QQ界面 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowIcon(QIcon(":/tu/qq.png"));this->setWindowTitle("登录&qu…

第6章——深度学习入门(鱼书)

第6章 与学习相关的技巧 本章将介绍神经网络的学习中的一些重要观点&#xff0c;主题涉及 寻找最优权重参数的最优化方法、权重参数的初始值、超参数的设定方法 等。此外&#xff0c;为了应对过拟合&#xff0c;本章还将介绍 权值衰减、Dropout等正则化方法&#xff0c;并进行实…

不必为发“压岁钱”或“红包”烦恼

中国人的民俗——过年要发“压岁钱”&#xff0c;也称发“ 红包 ”&#xff0c;时间确定在除夕夜12点正。因为按照传统观念&#xff0c;除夕夜是阴阳交替重要时刻&#xff1b;发“压岁钱”&#xff0c;也代表着辟邪驱鬼、保佑平安。“岁”字的谐音“祟”&#xff0c;即灾祸&…

Page 251~254 Win32 GUI项目,第二次分析

11行&#xff0c;本程序要创建的窗口的窗口过程(回调函数)&#xff0c;就是窗口用于处理消息的过程&#xff0c;返回值的类型是一个宏定义&#xff0c;即LRESULT&#xff0c;当操作系统分派消息给本窗口时&#xff0c;回调此函数&#xff0c;处理消息。 14行&#xff0c;使用全…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之ScrollBar组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之ScrollBar组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、ScrollBar组件 鸿蒙&#xff08;HarmonyOS&#xff09;滚动条组件ScrollBar&…

常见的ANSI转义码

ANSI 转义码是一组控制码&#xff0c;用于在文本中添加格式化和颜色。这些码以 ESC&#xff08;Escape&#xff09;字符为开头&#xff0c;通常是 \x1b&#xff0c;后面紧跟着一系列参数和指令。在 ANSI 标准中&#xff0c;这些码通常用于控制终端的文本输出。 下面是一些常见…

20240207大盘数据分析

先上图&#xff1a; 图1&#xff0c;涨跌分布 图1 涨跌数量分布 图2 各大指数涨跌分布 数据分析一下&#xff1a; 上证指数和深证指数是很宽的综合指数&#xff0c;上证指数有2162个上交所股票。深证指数有500个深交所股票。这两目前没有纳入救市范围。 比较有特点的是 上…

6个好看的wordpress模板

简站wordpress服务业通用主题 2023年立秋纪念版&#xff0c;简站wordpress服务行业通用主题&#xff0c;适合服务行业企业官网使用。 https://www.jianzhanpress.com/?p5393 小语种翻译wordpress主题 小语种国家外贸网站建设需要的wordpress主题模板&#xff0c;适合做小语…

使用异步命名管道通信的实例

记录一个使用异步命名管道通信的实例。代码参考了 MSDN 的文档&#xff1a;使用完成例程的命名管道服务器 - Win32 apps | Microsoft Learn。 服务端代码 #include <windows.h> #include <stdio.h> #include <tchar.h> #include <strsafe.h>#define…

相机图像质量研究(5)常见问题总结:光学结构对成像的影响--景深

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

ansible shell模块 可以用来使用shell 命令 支持管道符 shell 模块和 command 模块的区别

这里写目录标题 说明shell模块用法shell 模块和 command 模块的区别 说明 shell模块可以在远程主机上调用shell解释器运行命令&#xff0c;支持shell的各种功能&#xff0c;例如管道等 shell模块用法 ansible slave -m shell -a cat /etc/passwd | grep root # 可以使用管道…

Git中为常用指令配置别名

目录 1 前言 2 具体操作 2.1 创建.bashrc文件 2.2 添加指令 2.3 使其生效 2.4 测试 1 前言 在Git中有一些常用指令比较长&#xff0c;当我们直接输入&#xff0c;不仅费时费力&#xff0c;还容易出错。这时候&#xff0c;如果能给其取个简短的别名&#xff0c;那么事情就…

航芯ACM32G103开发板评测 08 ADC Timer外设测试

航芯ACM32G103开发板评测 08 ADC Timer外设测试 1. 软硬件平台 ACM32G103 Board开发板MDK-ARM Keil 2. 定时器Timer 在一般的MCU芯片中&#xff0c;定时器这个外设资源是非常重要的&#xff0c;一般可以分为SysTick定时器&#xff08;系统滴答定时器&#xff09;、常规定时…

如何利用IP定位技术锁定网络攻击者

在当今高度互联的数字世界中&#xff0c;网络安全威胁日益猖獗。为了维护网络空间的安全与稳定&#xff0c;追踪并锁定网络攻击者成为了关键一环。而IP定位技术&#xff0c;作为一种重要的追踪手段&#xff0c;正发挥着越来越重要的作用。 IP定位技术&#xff0c;简而言之&…

读懂 FastChat 大模型部署源码所需的异步编程基础

原文&#xff1a;读懂 FastChat 大模型部署源码所需的异步编程基础 - 知乎 目录 0. 前言 1. 同步与异步的区别 2. 协程 3. 事件循环 4. await 5. 组合协程 6. 使用 Semaphore 限制并发数 7. 运行阻塞任务 8. 异步迭代器 async for 9. 异步上下文管理器 async with …

JavaScript基础第六天

JavaScript 基础第六天 今天我们学习数组的遍历&#xff0c;以及数组的其他用法。 1. 数组遍历 1.1. 古老方法 可以使用 for 循环进行遍历。 let arr ["a", "b", "d", "g"]; for (let i 0; i < arr.length; i) {console.log…