代码随想录-47-101. 对称二叉树

news2025/1/16 21:45:28

目录

  • 前言
    • 题目
  • 1.递归
      • 思路
    • 2. 本题思路分析:
    • 3. 算法实现
    • 4. pop函数的算法复杂度
    • 5. 算法坑点

前言

在本科毕设结束后,我开始刷卡哥的“代码随想录”,每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
代码随想录此题链接

题目

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:
在这里插入图片描述
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
在这里插入图片描述

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

提示:

树中节点数目在范围 [1, 1000] 内
-100 <= Node.val <= 100

1.递归

思路

  • 判断树是否对称,就是看根节点的左右孩子是否可以翻转。
    递归应该是用后序遍历,因为相当于比较节点的左右孩子情况后,才能判断上一级节点是否相互对称。

2. 本题思路分析:

本题使用类似后序遍历的思想,相当于
递归三步曲,
第一步确定函数参数和返回值,因为需要比较节点的左右孩子是否可以反转,参数是左右孩子的节点类型,而返回值就是判断是否可以翻转的boolean
第二步确定终止条件,节点为空的情况三种,

if(left == null && right != null){
  return false;
}else if(left != null && right == null){
    return false;
}else if(left == null && right == null){
    return true;
}

值是否的相同有2种

else if(left.val != right.val){
 return false;
}
//以及左右孩子值相同的一种情况 这个就是需要继续下一步递归判断他们的孩子节点了

第三步,单层递归逻辑
比较左右子树的外侧是否相同,相当于比较左边节点的左孩子和右边节点的右孩子是否相同,
如果两者都相同则认为当前左右节点对称。

 //单层操作  外侧比较
 boolean outer = compare(left.left,right.right);
 //单层操作   内侧比较
 boolean inner = compare(left.right,right.left);
 boolean isSame = inner && outer;

3. 算法实现

  • 代码:
    递归:
public boolean isSymmetric(TreeNode root) {
    return compare(root.left,root.right);
}

public boolean compare(TreeNode left,TreeNode right){
    //判断节点的左右孩子为空的时候
    if(left == null && right != null){
        return false;
    }else if(left != null && right == null){
        return false;
    }else if(left == null && right == null){
        return true;
    }
	//左右孩子值是否相同
	else if(left.val != right.val){
        return false;
    }
    //单层操作  外侧比较
    boolean outer = compare(left.left,right.right);
    //单层操作   内侧比较
    boolean inner = compare(left.right,right.left);
    boolean isSame = inner && outer;
    return isSame;
}

4. pop函数的算法复杂度

5. 算法坑点

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

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

相关文章

FileNotFoundError: [Errno 2] No such file or directory VSCode Python插件的工作路径

文章目录1 前言2 Python主进程工作路径3 解决参考1 前言 在VSCode中&#xff0c;你是否遇到这样的情况 Traceback (most recent call last):File "......*.py", line 1, in <module>with open(filepath, r) as f: FileNotFoundError: [Errno 2] No such file…

提面优秀成功上岸浙大MBA的一点经验——专业管理思维很重要

本人的学历背景比较一般&#xff0c;就是个普通一本&#xff0c;但大学时为了挣学分&#xff0c;参加了不少的活动&#xff0c;还考了教师资格证&#xff0c;并且还去山区支教过3个月&#xff0c;支教一开始也是为了学分&#xff0c;但是通过与孩子们的相处&#xff0c;其实自己…

http相关(更新中)

概念 HTTP&#xff08;hypertext transport protocol&#xff09;协议也叫超文本传输协议&#xff0c;这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。HTTPS更安全&#xff1b;无状态&#xff0c;cookie解决了无状态的问题 请求过程 客户端发送给服务器的称为“…

深度聚类方法之跨实例引导的对比聚类(Cross-instance guided Contrastive Clustering,C3)

深度聚类方法之跨实例引导的对比聚类(Cross-instance guided Contrastive Clustering,C3) 1.参考文献 《C3: Cross-instance guided Contrastive Clustering》2.跨实例引导的对比聚类(Cross-instance guided Contrastive Clustering,C3) 该方法是在对比聚类(Contrastive Clus…

Linux系统编程——信号

1.信号 信号共性: 简单、不能携带大量信息、满足条件才发送。信号的特质: 信号是软件层面上的“中断”。一旦信号产生&#xff0c;无论程序执行到什么位置&#xff0c;必须立即停止运行&#xff0c;处理信号&#xff0c;处理结束&#xff0c;再继续执行后续指令。所有信号的产…

如何使用Element-UI?

文章目录Element-UI概述Element-UI快速入门Element 布局Layout 局部Container 布局容器Element-UI组件使用案例介绍准备基本页面完成表格展示拷贝修改完成搜索表单展示完成批量删除和新增按钮展示完成对话框展示完成分页条展示完整页面代码Element-UI概述 Element&#xff1a;…

day11|144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历

144.二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xf…

隔离放大器工作原理及其应用

介绍 隔离放大器或单位增益放大器提供从电路的一部分到另一部分的隔离。因此&#xff0c;不能在电路中消耗、使用和浪费功率。该放大器的主要功能是增加信号。运算放大器的相同输入信号作为输出信号从运算放大器精确地传出。这些放大器用于提供电气安全屏障和隔离。这些放大器…

从制造到“智造”,中国电信5G创新赋能工厂进入全连接时代

日前&#xff0c;工业和信息化部印发《5G全连接工厂建设指南》&#xff0c;提出“十四五”时期&#xff0c;主要面向原材料、装备、消费品、电子等制造业各行业以及采矿、港口、电力等重点行业领域&#xff0c;推动万家企业开展5G全连接工厂建设&#xff0c;建成1000个分类分级…

十一.字符串函数与内存函数

目录 一.求字符串长度 二.长度不受限制的字符串函数 1.strcpy函数 2.strcat函数 3.strcmp函数 三.长度受限制的字符串函数 1.strncpy函数 2.strncat函数 3.strncmp函数 四.字符串查找 1.strstr函数 2.strtok函数 3.strerror函数 五.字符操作 1.字符分类 2.字符…

【SpringCloud04】订单-支付微服务模块(消费者订单模块)

1.建cloud-consumer-order80 2.改pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…

黑客在 GitHub 上的劫持活动中使用验证码绕过策略

作为名为 PURPLEURCHIN 的免费劫持活动的一部分&#xff0c;已观察到一个名为 Automated Libra 的南非威胁行为者使用验证码旁路技术以编程方式创建 GitHub 帐户。 Palo Alto Networks Unit 42 研究人员 William Gamazo 和 Nathaniel Quist 表示&#xff0c;该组织“主要针对提…

【UE4 第一人称射击游戏】36-切换武器时改变UI

上一篇&#xff1a;UE4 第一人称射击游戏】35-击中目标时添加准心提示本篇效果&#xff1a;步骤&#xff1a;打开项目设置&#xff0c;添加两个操作映射两个操作映射分别命名为“SelectPrimary”和“SelectSecondary”&#xff0c;通过键盘1和2控制&#xff0c;分别表示玩家当前…

【MySQL】-【索引的创建与设计原则】

目录索引的声明与使用索引的分类创建索引创建表的时候创建索引在已经存在的表上创建索引索引的声明与使用 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。&#xff08;没有空间索引是因为有的存储引擎不支持空间索引&#xff…

波士顿房价预测——机器学习入门级案例

一、数据处理 1.1 数据集介绍 本实验使用波士顿房价预测数据集&#xff0c;共506条样本数据&#xff0c;每条样本包含了12种可能影响房价的因素和该类房屋价格的中位数&#xff0c;各字段含义如下表所示&#xff1a; 字段名类型含义CRIMfloat该镇的人均犯罪率ZNfloat占地面积…

springboot中迁移接口报404错误找不到 main方法java.lang.UnsupportedClassVersionError的经历

一、出现问题公司有接口要迁移到新服务中&#xff0c;服务不能启动错误大概如下&#xff1a;错误: 在类 ### 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application问题1解决后&am…

字符串函数和内存函数

在c语言中&#xff0c;有非常多的库函数&#xff0c;比如我们经常使用的scanf和printf&#xff0c;除此之外&#xff0c;还有一些非常实用的函数&#xff0c;比如我们之前使用的qsort排序函数&#xff0c;可以对任意数据类型进行排序&#xff0c;strlen函数&#xff0c;可以计算…

1.5万字总结 Redis 常见面试题知识点

以下内容来源于于我开源的 JavaGuide (Java学习&&面试指南,Github 130k star,370人共同参与爱完善), 万字总结,质量有保障! Redis 基础 什么是 Redis? Redis 是一个基于 C 语言开发的开源数据库(BSD 许可),与传统数据库不同的是 Redis 的数据是存在内存中的…

磨金石教育插画技能干货分享|学习插画可以从事什么工作?

近几年插画师这个行业越来越热&#xff0c;许多有一定绘画基础的朋友&#xff0c;都在跃跃欲试&#xff0c;想要走进插画这个行业。但不少人都有一种担忧&#xff0c;就是插画师这个职位平时听的很少&#xff0c;认为这是个冷门行业&#xff0c;是不是难以就业&#xff0c;风险…

边双连通分量

如果还未学习强连通分量&#xff0c;建议先学习强连通分量的tarjan算法强连通分量&#xff08;tarjan算法&#xff09; 1&#xff0c;定义 相对于在单向图的强连通分量&#xff0c;双连通分量是在无向图中&#xff0c;无向图有一个特点&#xff0c;可以以任何一个点为根节点建…