算法题解记录28+++对称二叉树(百日筑基)

news2024/12/28 20:59:12

一、题目描述:

题目难度:简单
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
示例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.题意:解释题意

A.题目要求:判断一棵树是否轴对称。

一棵树的轴对称,主要看它的左子树在翻转后,左右子树是否相等
这涉及到翻转二叉树和判断二叉树相等的知识。

2.基本操作:题目涉及的基本操作

本题只涉及二叉树的遍历。

3.基础原理:题目涉及的算法的基本原理

A.DFS深度遍历

深度遍历是常用的二叉树算法。

B.BFS广度遍历

广度遍历同样是常用的二叉树算法,二者的结合,基本可以解决大部分二叉树问题。


分割线


三、解题思路:

思路:先翻转左子树,然后与右子树比较

A.翻转左子树

左子树的翻转方法,可以采用DFS,每一步翻转对应的左右节点,直到遇到null结点,说明翻转完毕。
代码为

private void reverse(TreeNode root){
	// 节点为null,说明翻转结束
    if(root==null){
        return;
    }

	// 翻转左右子节点
    TreeNode temp = root.right;
    root.right = root.left;
    root.left = temp;

	// 翻转左右子树
    reverse(root.left);
    reverse(root.right);
}

B.树相等的判断

回忆前序遍历算法,我们知道:
我们优先访问根节点,然后是左子树,最后是右子树。
如果我们同时访问两棵树,一样可以采用前序遍历算法,这时,只要顺序一样,就能够保证访问的层序、节点间的关系是一致的。
层序:比如根节点在第0层,第一个左子节点在第1层,左孙节点在第2层。
节点间关系:左子节点,在右子节点的左边。
代码为:

private boolean btEqual(TreeNode tree1, TreeNode tree2){
	// 都为空,说明相等【起码在这一分支上】
    if(tree1==null && tree2==null){
        return true;
    }
    // 只有一方为null,不相等
    if(tree1==null || tree2==null){
        return false;
    }
	// 如果值不同,不相等
    if(tree1.val != tree2.val){
        return false;
    }

	// 否则,返回下一层节点的判断结果
    return btEqual(tree1.left, tree2.left) && btEqual(tree1.right, tree2.right);
}

分割线


四、解题难点分析:

无。


分割线


五、代码:

class Solution {
    public boolean isSymmetric(TreeNode root) {
        TreeNode left = root.left;
        TreeNode right = root.right;
        // 翻转左子树
        reverse(left);

        return btEqual(left, right);
    }

	// 判断两棵树相等否
    private boolean btEqual(TreeNode tree1, TreeNode tree2){
        if(tree1==null && tree2==null){
            return true;
        }
        if(tree1==null || tree2==null){
            return false;
        }

        if(tree1.val != tree2.val){
            return false;
        }

        return btEqual(tree1.left, tree2.left) && btEqual(tree1.right, tree2.right);
    }

	// 翻转树的函数
    private void reverse(TreeNode root){
        if(root==null){
            return;
        }

        TreeNode temp = root.right;
        root.right = root.left;
        root.left = temp;

        reverse(root.left);
        reverse(root.right);
    }
}

分割线


六、结语:

以上内容即我想分享的关于力扣热题27的一些知识。
我是蚊子码农,如有补充,欢迎在评论区留言。个人也是初学者,知识体系可能没有那么完善,希望各位多多指正,谢谢大家。

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

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

相关文章

Python基础用法 之 数据类型

Python常见数据类型分类 数字型非数字型整型&#xff1a; 整数--int--16 字符串&#xff1a;使用引号引起来的的就是字符串--Tom 浮点型&#xff1a;小数--float--16.66列表&#xff1a;list [1,2,3] 布尔型&#xff1a;bool&#xff08;真True&#xff0c;假False&#xff…

手写MyBatis 重要基本原理框架

1. 手写MyBatis 重要基本原理框架 文章目录 1. 手写MyBatis 重要基本原理框架1.1 第一步&#xff1a;IDEA中创建模块1.2 第二步&#xff1a;资源工具类&#xff0c;方便获取指向配置文件的输入流1.3 第三步&#xff1a;定义SqlSessionFactoryBuilder类1.4 第四步&#xff1a;分…

国产MCU芯片(2):东软MCU概览

前言: 国产芯片替代的一个主战场之一就是mcu,可以说很多国内芯片设计公司都打算或者已经在设计甚至有了一款或多款的量产产品了,这也是国际大背景决定的。过去的家电市场、过去的汽车电子市场,的确国产芯片的身影不是很常见,如今不同了,很多fabless投身这个行业,一种是…

开源语音合成模型ChatTTS本地部署结合内网穿透实现远程访问

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 本篇文章就教大家如何快速地在Windows中本地部署ChatTTS&#xff0c;并且我们还可以结合Cpolar内网穿透实现公网随时随地访问ChatTTS AI语言模型。 最像人声的AI来了&a…

跟着刘二大人学pytorch(第---12---节课之RNN基础篇)

文章目录 0 前言0.1 课程视频链接&#xff1a;0.2 课件下载地址&#xff1a; 1 Basic RNN1.1 复习DNN和CNN1.2 直观认识RNN1.3 RNN Cell的内部计算方式 2 具体什么是一个RNN&#xff1f;3 使用pytorch构造一个RNN3.1 手动构造一个RNN Cell来实现RNN3.2 直接使用torch中现有的RN…

(4)SDL渲染开发

SDL渲染开发 1. SDL简介2. 环境搭建2.1 windows2.2 Linux 3. SDL子系统3.1 eg1 创建窗口 4&#xff1a;SDL显示4.1 显示图片4.2 绘制长方形显示 5. SDL事件6. SDL多线程6.1 接口演示6.2 yuv显示6.3 pcm播放 1. SDL简介 SDL&#xff08;Simple DirectMedia Layer&#xff09;是一…

数据库概述1

数据&#xff1a;描述事物的符号记录称为数据&#xff1b; 包括数字、图片、音频等&#xff1b; 数据库&#xff1a;长期储存在计算机内有组织、可共享的大量数据的集合&#xff1b;数据库中的数据按照一定的数据模型组织、描述和存储&#xff0c;具有较小的数据冗余、较高的数…

【支持向量机】问题梳理

学完支持向量机后我有些地方不太清楚&#xff0c;故做如下梳理&#xff1a; 1.为什么支持向量机模型认为一个点划分正确的标志是y(wxb)>1呢&#xff0c;为什么不是y(wxb)>0&#xff0c;比如y为1&#xff0c;wxb为0.5&#xff0c;大于0&#xff0c;则预测正确。 2.所以意思…

[Python]Anaconda相关命令

环境操作相关命令 查看所有环境 conda env list创建环境 conda create --name cahttts python3.10激活环境 conda activate cahttts安装依赖文件 pip install -r requirements.txt查看GPU型号 nvidia-smi -LGPU 0: NVIDIA A10 (UUID: GPU-9f1fc9cf-582a-25ac-849c-2f77343…

FFmpeg编解码的那些事(3)-视频硬解码的基础知识

目录 前言&#xff1a; 1.iso/os x平台 2.windows平台 3.linux平台 4.Tips&#xff1a; 5.结论&#xff1a; 前言&#xff1a; 视频硬解码的过程就是把视频提取成图片变显示出来&#xff0c;就是播放器播放视频的过程&#xff0c;就可以理解为解码的过程。 在不同的系统…

R进阶使用技巧

Introduction 分享一些R进阶使用的技巧&#xff0c;相当于是之前写的R语言学习的实践和总结了。 Online slide: https://asa-blog.netlify.app/R_tips_for_advanced_use_byAsa/R_tips.html 下载slide和相关的各种test文件: https://asa-blog.netlify.app/R_tips_for_advanced…

【论文阅读】AttnDreamBooth | 面向文本对齐的个性化图片生成

文章目录 1 动机2 方法3 实验 1 动机 使用灵活的文本控制可以实现一些特定的概念的注入从而实现个性化的图片生成。 最经典的比如一些好玩的动漫人物的概念&#xff0c;SD大模型本身是不知道这些概念的&#xff0c;但是通过概念注入是可以实现的从而生成对应的动漫人物 两个…

element-plus表单组件之自动补全组件el-autocomplete和级联选择器组件el-cascader

el-autocomplete 自动补全组件 自补全组件的功能和可以根据输入过滤的el-select组件有些类似。 fetch-suggestions 根据输入框的输入获取建议的内容&#xff0c;其接受值是一个函数&#xff0c;有2个参数&#xff0c;querystring:输入的内容&#xff0c;callback内置函数&…

爱心代码来喽

今天给大家分享一个爱心代码&#xff0c;送给我的粉丝们。愿你们天天开心&#xff0c;事事顺利&#xff0c;学业和事业有成。 下面是运行代码&#xff1a; #include<stdio.h> #include<Windows.h> int main() { system(" color 0c"); printf(&q…

代码随想录-Day32

122. 买卖股票的最佳时机 II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能…

【算法专题--链表】删除排序链表中的重复元素II -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐ 双指针 -- 采用 哨兵位头节点 &#x1f95d; 什么是哨兵位头节点&#xff1f; &#x1f34d; 解题思路 &#x1f34d; 案例图解 四、总结与提炼 五、共勉 一、前言 删除排序链表中的重复元素II元素这道题&#xff0c…

MySQL之优化服务器设置(五)

优化服务器设置 高级InnoDB设置 innodb_old_blocks_time InnoDB有两段缓冲池LRU(最近最少使用)链表&#xff0c;设计目的是防止换出长期很多次的页面。像mysqldump产生的这种一次性的(大)查询&#xff0c;通常会读取页面到缓冲池的LRU列表&#xff0c;从中读取需要的行&…

ubuntu中安装docker并换源

使用 Ubuntu 的仓库安装 Docker sudo apt update现在&#xff0c;你可以使用以下命令在 Ubuntu 中安装 Docker 以及 Docker Compose&#xff1a; sudo apt install docker.io docker-composeDocker 包被命名为 docker.io&#xff0c;因为在 Docker 出现之前就已经存在一个名为…

C++ virtual public(虚继承类)

这个"virtual"有什么作用&#xff1f; 由于C支持多重继承&#xff0c;所以对于一个派生类中有几个直接父类&#xff0c;而几个直接父类中有几个可能分别继承自某一个基类&#xff08;就是父类的父类&#xff09;&#xff0c;这样在构造最终派生类时&#xff0c;会出现…

Nginx + Tomcat 负载均衡、动静分离

前言 Tomcat简介 最初是由Sun的软件构架师詹姆斯邓肯戴维森开发 安装Tomcat后&#xff0c;安装路径下面的目录和文件&#xff0c;是使用或者配置Tomcat的重要文件 Nginx 应用 Nginx是一款非常优秀的HTTP服务器软件 &#xff08;1&#xff09;支持高达50 000个并发连接数的响应…