【LeetCode经典题解】递归破解对称二叉树之谜

【LeetCode经典题解】递归破解对称二叉树之谜
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:Java.数据结构
在这里插入图片描述


在这里插入图片描述


【前言】

在二叉树的各类算法问题中,“判断二叉树是否对称”是经典且基础的题型,它不仅能考查对二叉树结构的理解,更能体现递归思想的灵活运用。对称二叉树的核心特征是:树的左子树与右子树呈现镜像关系,即左子树的左子树和右子树的右子树对称、左子树的右子树和右子树的左子树对称。本文将基于递归的思路,拆解这道题的解题逻辑,帮助读者深入理解二叉树的对称性判断。

文章目录:

一、对称二叉树

在这里插入图片描述

二、思路分析

在这里插入图片描述

1. 边界处理

先判断跟是否为空,如果为空的话,也可以认为是对称的;

2. 递归比较左右子树

isSymmetric()方法中,只有一个参数,显然是无法解决下面两个子树的问题,所以再构造一个方法:isSymmetric2()作为辅助方法,传入节点的左右子树,从顶层开始逐层,逐节点比较;

3. 辅助方法isSymmetric2()具体实现逻辑

如果左子树为空,右子树不为空,或者左子树不为空,右子树为空,说明不对称,返回false;如果左子树和右子树都为空,说明也是对称的,返回true;剩下的就是左子树和右子树都不为空的情况,然后判断它们的val值是否相同,如果不相同,说明不对称,返回false;递归比较左子树的左节点和右子树的右节点,左子树的右节点和右子树的左节点是否相同,相同说明对称,返回true.

三、代码详解

publicbooleanisSymmetric(TreeNode root){if(root ==null){returntrue;}returnisSymmetric2(root.left, root.right);}publicbooleanisSymmetric2(TreeNode leftTree,TreeNode rightTree){if((leftTree ==null&& rightTree !=null)||(leftTree !=null&& rightTree ==null)){returnfalse;}if(leftTree ==null&& rightTree ==null){returntrue;}if(leftTree.val != rightTree.val){returnfalse;}returnisSymmetric2(leftTree.left, rightTree.right)&&isSymmetric2(leftTree.right, rightTree.left);}

四、总结

本题通过递归的方式,巧妙地将“二叉树是否对称”的问题拆解为“左右子树是否镜像”的子问题,再进一步拆解为“对应位置子树是否对称”的更小问题,充分体现了递归“分而治之”的思想。

Read more

GitHub 教育认证通过后如何领取 Copilot Pro

最近我通过了 GitHub 教育认证(Student Developer Pack),但是发现并没有立刻拿到 Copilot Pro。折腾了一番之后终于搞定了,这里记录一下过程,方便后面遇到同样问题的同学。 1. 教育认证通过 ≠ 立即开通 当你刚刚通过认证时,Student Pack 页面可能显示绿标,提示福利稍后开放,这时候需要等待几天到两周左右。 * 绿标:福利还在处理阶段(will be available soon)。 * 紫标:福利已经激活(benefits are now available)。 所以,如果你刚过认证但没看到 Copilot Pro,不用急,先等等。 2. 手动领取 Copilot Pro 即使福利已经激活,你也需要手动去领取: 👉 访问这个链接: https://github.com/github-copilot/

By Ne0inhk
技术速递|GitHub Copilot CLI 斜杠命令速查表

技术速递|GitHub Copilot CLI 斜杠命令速查表

作者:Jacklyn Carroll 排版:Alan Wang 直接在你的工作流中运行测试、修复代码并获得支持。保持专注,把繁琐的工作交给 Copilot。 你有没有感觉,自己花在不同工具之间来回切换的时间,比真正写代码的时间还多?如果你习惯在终端中高效工作,希望用更快、更可预测的方式来运行测试、修复代码、管理上下文,那么 Copilot CLI 的斜杠命令正好能在不打断你工作流的前提下,给你这种掌控力。 你可以通过斜杠命令完成各种任务,比如配置要使用的 AI 模型、设置 MCP 服务器,甚至将当前会话对外分享。斜杠命令提供的是快速、可重复的操作,不需要每次都重新构造一段提示词。 TL;DR:本文文末附所有斜杠命令及其功能说明。😉 什么是斜杠命令? 斜杠命令是一种简单的指令,比如 /clear 或 /session,用来明确告诉 Copilot 你想做什么。它们都以 / 开头,会立即触发

By Ne0inhk
【Linux】从版本控制到代码调试:Git 入门与 GDB 调试器学习指南

【Linux】从版本控制到代码调试:Git 入门与 GDB 调试器学习指南

前言  作为 Linux 开发的 “左膀右臂”,Git 管版本、gdb 调程序 —— 前者搞定代码的迭代与协同,后者专治程序里的各种 “疑难杂症”。这篇博客就从 Git 的核心概念、基础操作,讲到 gdb 的调试指令,把这俩工具的高频用法讲透,帮你把开发效率直接拉满。 目录 一、Git 版本控制器 1.1 什么是 Git? 【问题】:什么是分布式? 【问题】:什么是集中式? 1.2 Git 核心概念  1.3 GitHub 与 Gitee 二、Git 基础操作 1. Git安装 2. 远程仓库与本地仓库联动(以

By Ne0inhk
Windows环境Git安装教程(下载Git安装包、安装Git、验证Git是否安装成功、设置名字和邮箱)

Windows环境Git安装教程(下载Git安装包、安装Git、验证Git是否安装成功、设置名字和邮箱)

文章目录 * 1. 下载Git安装包 * 1.1 通过清华大学开源软件镜像站下载(推荐) * 1.2 通过Git官网下载 * 1.3 通过联想电脑管家下载 * 2. 安装Git(一路点击Next即可) * 3. 验证Git是否安装成功 * 4. 设置个人信息(名字和邮箱) 1. 下载Git安装包 1.1 通过清华大学开源软件镜像站下载(推荐) 下载地址:https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/ https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/ 点击 LatestRelease/ 目录 下载

By Ne0inhk