翻转等价二叉树

2023-11-08

leetcode

翻转等价二叉树

我们可以为二叉树 T 定义一个翻转操作,如下所示:选择任意节点,然后交换它的左子树和右子树。

只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转等价于二叉树 Y。

编写一个判断两个二叉树是否是翻转等价的函数。这些树由根节点 root1 和 root2 给出。

示例:

输入:root1 = [1,2,3,4,5,6,null,null,null,7,8], root2 = [1,3,2,null,6,4,5,null,null,null,null,8,7]
输出:true
解释:我们翻转值为 1,3 以及 5 的三个节点。

解法:递归

解题思路:要判断两个树是否是二叉树,只要两颗树的根结点的值相同且以两颗树的左右孩子为根的树能构成翻转二叉树就可以了

因此我们可以得到这样一个方程:

boolean ll = flipEquiv(root1.left,root2.left);
//以root.left为根的树跟以root2.left为根的树能构成翻转二叉树
boolean lr = flipEquiv(root1.left,root2.right);
boolean rl = flipEquiv(root1.right,root2.left);
boolean rr = flipEquiv(root1.right,root2.right);
//同理
return true&&((ll&&rr)||(lr&&rl));
//必须得左右孩子都满足才能确定该树是一颗翻转二叉树

递归出口:

if(root1==null&&root2!=null)
    return false;
//一个为空另一个不为空,肯定构不成翻转二叉树
else if(root1!=null&&root2==null)
    return false;
//同理
else if(root1==null&&root2==null)
    return true;
//两个都为空满足翻转二叉树
if(root1.val!=root2.val)
    return false;
//两个不相等不满足翻转二叉树,直接返回false

完整代码:

class Solution {
    public boolean flipEquiv(TreeNode root1, TreeNode root2) {
        if(root1==null&&root2!=null)
            return false;
        else if(root1!=null&&root2==null)
            return false;
        else if(root1==null&&root2==null)
            return true;
        if(root1.val!=root2.val)
            return false;
        boolean ll = flipEquiv(root1.left,root2.left);
        boolean lr = flipEquiv(root1.left,root2.right);
        boolean rl = flipEquiv(root1.right,root2.left);
        boolean rr = flipEquiv(root1.right,root2.right);
        return true&&((ll&&rr)||(lr&&rl));
    }
}

题目来源于

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/flip-equivalent-binary-trees

e)

链接:https://leetcode-cn.com/problems/flip-equivalent-binary-trees

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

翻转等价二叉树 的相关文章

  • DPB详解

    解码图像缓存器 decoded picture buffer DPB 用于存放解码图像 DPB中既存在参考图像也存在非参考图像 那些不用于参考的图像输出后会被移除出DPB DPB的容量由SPS中的sps max dec pic buffer

随机推荐

  • 关于CNN中的maps

    1 feature maps 在每个卷积层 数据都是以三维形式存在的 你可以把它看成许多个二维图片叠在一起 其中每一个称为一个feature map 在输入层 如果是灰度图片 那就只有一个feature map 如果是彩色图片 一般就是3个
  • ESP32开发路程LVGL篇(三)——显示图片

    目录 显示图片 在线转换图片 图片加入项目 主函数代码 参考 LVGL 图片 显示图片 本文利用的方式 通过工具将图片转化为 c文件 写入单片机程序并进行烧录 这种方式实现起来较为简单 但是由于硬件限制 图片的大小会受限 且占用内存 可以用
  • Mysql数据库10万条数据多表联合查询速度过慢解决方案

    点我 查看原文 问题描述 今天在写项目时发现之前好好的查询接口突然挂了 检查后发现原来是有人往数据里新增了10万条数据 以至于Mysql语句执行的特别慢就不行了 原因 原因也简单这个接口原本是一张组织机构表关联区域表 组织标准类型表 币种表
  • xxl-job任务管理平台的配置与使用

    xxl job任务管理平台的配置 是否启用job executor 如果设置为false 则不初始化 job executor enable true web port server port 8083 调度中心部署根地址 选填 如调度中心
  • Linux 粘滞位 suid sgid

    粘滞位 o t 针对目录赋权 目录中创建的文件只有创建者才可以删除 命令 chmod o t 目录名 删除权限用减即可 sgid g s 针对目录建立权限 在该目录中建立的文件所属组继承父目录的属组 命令 chmod g s 目录名 删除权
  • java实体类非空判断@NotEmpty、@NotNull等注解无效解决

    1 引入Spring Hibernate Validator的依赖 此Hibernate 非Hibernate ORM框架的Hibernate
  • node deno_Deno手册:带有代码示例的TypeScript运行时教程

    node deno I explore new projects every week and it s rare that one grabs my attention as much as Deno did 我每周都会探索新的项目 很少
  • 专业招聘人吐血心得,华为Offer这不是白送吗!

    从事IT行业专项招聘很久了 接触华为OD也有几年的时间 遇到过大批非常想进到华为并提升自己的技术的大牛候选人们 其中会有部分曾有过优秀的行业经验或是院校背景的 因为畏惧机考 没通过的 也有性格测试挂了的以及离成功更近的面试挂了的等等情况 而
  • mybatis和springmvc的本质区别与应用场景

    Hibernate 是一个标准的ORM 对象关系映射 框架 入门门槛较高 不需要程序员自己写sql代码 sql语句自动生成 但是 对于sql的优化 修改就比较困难了 应用场景 适用于需求变化不多的中小型项目 因为sql语句都是系统以及写好的
  • 辞职的时候,如果老板挽留你,你会怎么办呢?

    俗话说 流水不腐 户枢不蠹 职场上 人员流动也是颇为正常的事情 我们说如果你想离开 一般有三种情况 第一种 全公司人民 包括老板 烧高香 送 瘟神 似地把你送走 第二种 他们的态度不温不火 持保留意见 就是您走和留的关系不大 第三种 老板要
  • 5 款阿里常用代码检测工具,免费用!

    作者 喻阳 面临问题 在日常研发过程中 我们通常面临的代码资产问题主要分为两大类 代码质量问题和代码安全漏洞 1 代码质量问题 代码质量其实是一个老生常谈的话题 但问题是大家都知道它很重要 却又不知道如何去提升和维护这一团队的共同财产 一方
  • Cannot query the value of property ‘javaLauncher‘ because it has no value available.

    背景 使用 gradlew nativeCompile报错 原因 未配置JAVA HOME 参考链接 解决 配置JAVA HOME即可sudo vim etc profile export JAVA HOME opt graalvm jdk
  • python语言实现:已知一行由英文字母(A-Z,a-z)和数字(0-9) 组成的字符串的加密规则如下:大写英 文字母向后移1位,如A一B,B一C, 丫一Z,Z一A;小写英文字母向后移2位,如 a-c...

    用Python实现该加密规则 可以使用ord 和chr 函数 def encrypt s r for c in s if A lt c lt Z r chr ord c 1 elif a lt c lt z r chr ord c 2 el
  • 关于react-Ant Design框架Button按钮的基础用法

    前言 最近在学习react Ant Design框架 把button组件一些基础用法记录一下 引入框架 使用组件 基础按钮 首先我们得导入Ant Design和里面的button 才能进行使用 当然得确保之前在项目中你安装了Ant Desi
  • FPGA时序约束-设置伪路径和设置异步时钟

    什么是设置伪路径 伪路径是指该路径存在 但该路径的电路功能不会发生或者无须时序约束 创建伪路径的好处 可以减少工具运行优化时间 增强实现结果 避免在不需要进行时序约束的地方花费较多时间 设置伪路径一般用在 跨时钟域 一但上电就被写入数据的寄
  • dwr工具入门

    DWR是一个开源的类库 可以帮助开发人员开发包含AJAX技术的网站 它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数 就像它就在浏览器里一样 它包含两个主要的部分 允许JavaScript从WEB服务器上一个遵循了AJAX原
  • php THINKPHP5获取微信公众号access_token并存储

    需求背景 在TP5项目中 获取微信的access token并存储到Redis 并可以通过Redis查询access token 第一步 创建一个获取access token的方法 该方法需要向微信服务器发送请求 获取access toke
  • 设计模式的 C++ 实现---工厂方法模式(一)

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 前言 工厂模式通常适用于需要创建大量对象的情况 若仅需要一个对象 直接 new 即可 对于简单工厂模式 当需要增加新的产品时 需要对工厂类进行修改 违背了 开闭原则 对修改关闭
  • 技术栈

    1 微服务技术栈 微服务条目 技术 备注 服务开发 Springboot Spring SpringMVC 服务配置与管理 Netflix公司的Archaius 阿里的Diamond等 服务注册与发现 Eureka Consul Zooke
  • 翻转等价二叉树

    leetcode 翻转等价二叉树 我们可以为二叉树 T 定义一个翻转操作 如下所示 选择任意节点 然后交换它的左子树和右子树 只要经过一定次数的翻转操作后 能使 X 等于 Y 我们就称二叉树 X 翻转等价于二叉树 Y 编写一个判断两个二叉树