1361. 验证二叉树

news2024/12/24 2:21:02

目录

  • 题目
  • 思路
  • 代码

题目

二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]

只有 所有 节点能够形成且 形成 一颗 有效的二叉树时,返回 true;否则返回 false

如果节点 i 没有左子节点,那么 leftChild[i] 就等于 -1。右子节点也符合该规则。

注意:节点没有值,本问题中仅仅使用节点编号。

 

示例 1:

输入:n = 4, leftChild = [1,-1,3,-1], rightChild = [2,-1,-1,-1]
输出:true

示例 2:

输入:n = 4, leftChild = [1,-1,3,-1], rightChild = [2,3,-1,-1]
输出:false

示例 3:

输入:n = 2, leftChild = [1,0], rightChild = [-1,-1]
输出:false

示例 4:

输入:n = 6, leftChild = [1,-1,-1,4,-1,-1], rightChild = [2,-1,-1,5,-1,-1]
输出:false

 

提示:

  • 1 <= n <= 10^4
  • leftChild.length == rightChild.length == n
  • -1 <= leftChild[i], rightChild[i] <= n - 1

思路

看题目和例子总结

  • 二叉树
  • 一个节点存在一个以上的父节点 return false
  • 闭环 return false
  • 一个以上的联通量, return false

使用并查集可以解决上面2-4点情况。

  • 第二种情况
    union的时候判断一下节点是否已经关联了父节点就行了
  • 第三种情况。
    find一下父子节点的根节点,判断是否相等就可以知道父子节点是否存在闭环
  • 第四种情况。
    统计一下执行union的次数,就可以知道只剩下多少个联通量。

代码

class Solution {

    int ans;

    public boolean validateBinaryTreeNodes(int n, int[] leftChild, int[] rightChild) {
        int[] fa = new int[n];
        ans = n;
        for (int i = 0; i < n; ++i) fa[i] = i;
        for (int i = 0; i < n; ++i) {
            if (union(fa, i, leftChild[i]) || union(fa, i, rightChild[i])) return false;
        }
        if (ans > 1) return false;
        return true;
    }

    public int find(int[] fa, int n) {
        return fa[n] == n ? n : find(fa, fa[n]);
    }
    public boolean union(int[] fa, int f, int c) {
        if (c == -1) return false;
        if (fa[c] != c) return true;
        int a = find(fa, f), b = find(fa, c);
        if (a == b) return true;
        fa[b] = a;
        ans--;
        return false;
    }
}

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

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

相关文章

开发小程序遇到的问题

1、小程序授权定位时报错 原因&#xff1a; 需要授权 scope.userLocation、scope.userLocationBackground 时必须配置地理位置用途说明。 解决&#xff1a; 在app.json中&#xff0c;根据开发文档的提示&#xff0c;将下面的代码添加在与pages同级下 "permission": {…

16年经验的通信行业测试人,后悔入错行了吗?

屏幕前的读者对于一个行业的兴衰有什么看法呢&#xff1f;非常很现实的说&#xff0c;我们所处的行业直接关系着每个人的收入&#xff0c;处于行业的不同生命周期内&#xff0c;我们拿到的钱也会不一样。下面用本人所处的行业举个例子。工作经历初入通信行业从我进入通信行业的…

什么是SPI?SPI的优点有哪些?

1、什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是Motorola公司推出的一种同步串行接口技术&#xff0c;是一种高速、全双工、同步的通信总线。 2、SPI优点 支持全双工通信通信简单数据传输速率块 3、缺…

案例分析中可能的考点1:招投标程序

招投标程序&#xff1a; &#xff08;1&#xff09;投标方不满足资质要求&#xff1b; &#xff08;2&#xff09;投标过程不满足时间要求&#xff1b; &#xff08;3&#xff09;招标公告内容或过程不满足要求&#xff1b; &#xff08;4&#xff09;评标人员不满足组成要求&a…

【数据结构与算法】二叉树的非递归前中后序遍历

&#x1f320;作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《数据结构与算法要啸着学》 &#x1f387;座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;…

WebSphere8 批量安装和制作介质服务器

WAS 8.5 介质准备 1、安装install manager 2、安装IBM Packaging Utility unzip pu.offering.disk.linux_1.5.3000.20120531_2025.zip cd disk_linux/InstallerImage_linux ./consoleinst.sh 跟着向导安装。 3、安装PU mkdir pu cd pu unzip ../pu_1.5.3.zip ./imcl i…

如何使用集成在 SharePoint 中的开源 ONLYOFFICE 文档替代微软 Office

ONLYOFFICE 文档是一款开源的办公套件&#xff0c;在 GNU AGPL v3.0 下分发。它包括基于网络的查看器和协作编辑器&#xff0c;可用于处理文本文档、电子表格和演示文稿&#xff0c;与 OOXML 格式高度兼容。 ONLYOFFICE 文档可以与多种云服务集成&#xff0c;如 Nextcloud、ow…

仅CPU服务器pytorch ,torch_geometric安装配置

写在开头&#xff0c;做了整整三年的多组学数据分析&#xff0c;各种模式动物、组织、细胞系的各种组学数据&#xff0c;该怎么串联成我的论文&#xff1f;就是我要开启深度学习小白模式了。 万种流程先从环境配置开始&#xff0c;先说说环境&#xff0c;其实当家的有多GPU超大…

儿童护眼灯哪个好?四款儿童护眼台灯测评

儿童护眼灯在孩子的学习过程中起到了很重要的作用&#xff0c;53.7%的青少年们都有近视的现象&#xff0c;而好的台灯不仅照明非常柔和&#xff0c;而且对眼睛没有刺激和伤害&#xff0c;护眼灯相比传统电灯&#xff0c;一是古县更加明亮且可以调节&#xff0c;二是有护眼技术的…

HANA 的 calculation view出现模糊关联 ambiguous join

一旦我们用了join&#xff0c;那就会有个Analytic Engine分析引擎来确保不是唯一连接的时候&#xff0c;关键值不会被重复。 啥是模糊关联&#xff1f; 一般来讲关联基数是1&#xff1a;n, 或者n:1,或者 m:n都是。 以上两个关联&#xff0c;结果集如下&#xff1a; 这时候&a…

php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07

php学习笔记-php会话控制及web常用的预定义变量-day071、$_REQUEST2、$_SERVER3、$_COOKIE3.1 cookie的内容3.2 cookie的分类3.3 php中cookie的使用3.4 cookie自动登录小demo4、$SESSION4.1 session的工作原理4.2 session的使用4.2.1 修改php.ini中的session配置4.2.2 开启sess…

Android 深入系统完全讲解(13)

3 编译过程讲解 1 系统的编译过程 Android 的编译使用的 Makefile&#xff0c;推荐大家使用《GNU make 中文手册》&#xff0c;这本书有电子版&#xff0c;非常方便&#xff0c;主要是要理解清楚 Makefile 的规则&#xff0c;编译策略&#xff0c;可以通过写简单的编译机制&am…

【Java项目推荐】值得写到简历上的项目--黑马点评

优惠卷秒杀前言优惠券秒杀实现优惠券秒杀下单超卖问题一人一单分布式锁redis中加锁的一些特殊情况手动实现分布式锁分布式锁误删情况1分布式锁误删情况2lua脚本解决多条命令的原子性问题Redisson秒杀优化异步秒杀思路基于redis完成秒杀资格判断基于阻塞队列实现异步下单总结Red…

70、SSDNeRF: Semantic Soft Decomposition of Neural Radiance Fields

简介 官网&#xff1a;https://www.siddhantranade.com/research/2022/12/06/SSDNeRF-Semantic-Soft-Decomposition-of-Neural-Radiance-Fields.html SSDNeRF&#xff0c;将语义信号与场景的辐射信号联合编码&#xff0c;提供了场景的软分解为语义部分&#xff0c;能够正确编码…

【HCIA-openEuler】实验手册—09【openEuler综合实践】

文章目录一、实验介绍1、关于本实验2、实验目的二、实验任务配置1、配置思路2、配置步骤步骤1&#xff1a;挂载系统ISO&#xff0c;并配置好本地dnf源步骤2&#xff1a;配置软件安装源步骤3&#xff1a;安装文件共享服务三、设置文件共享用户与权限1、实验介绍&#xff08;1&am…

【Linux】编辑器 - vim 的使用与配置

目录 1、vim的基本概念 2、vim的基本操作 2.1、vim 编辑器的进入与退出 2.2、插入模式 2.3、命令模式 2.4、底行模式 3、vim的配置 3.1、自定义配置 3.2、自动化配置 vim 的前身是 vi&#xff0c;vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;…

Java对时间的处理

Date用的最多这里主要介绍该类。java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。 package com.company; import java.util.Date;public class Main {public static void main(String[] args) {// write your code hereSyste…

阿里云Docker仓库操作

为什么用阿里云docker有自己的仓库服务器&#xff0c;但是对没掏钱的&#xff08;白嫖&#xff09;用户并不是那么友好&#xff0c;有两个很大的限制&#xff1a;免费用户&#xff0c;在6个月之内如果没有任何操作&#xff0c;将会被自动删除&#xff0c;真的很糟糕啊。匿名用户…

港科夜闻|广州市花都区与香港科大(广州)合作建设科研智库,发展AI智慧农业...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、广州市花都区与香港科大(广州)合作建设科研智库&#xff0c;发展AI智慧农业。1月8日&#xff0c;广州市花都区人民政府和香港科大(广州)在广州举行签约仪式&#xff0c;根据协议&#xff0c;香港科大(广州)和花都区人民政府…

JS案例:接口加解密与防重放

目录 前言 功能设计 客户端的功能点&#xff08;client&#xff09; 服务端的功能点&#xff08;server&#xff09; 功能实现 工具函数 client.js&#xff08;客户端&#xff09; server.js&#xff08;服务端&#xff09; 实现效果 写在最后 前言 在网络通信中&am…