【Hot 100 刷题计划】 LeetCode 101. 对称二叉树 | C++ DFS 极简递归模板

LeetCode 101. 对称二叉树

📌 题目描述

题目级别:简单

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

  • 示例 1:

    输入:root = [1,2,2,3,4,4,3]

    输出:true

  • 示例 2:

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

    输出:false


💡 破题思路:递归 (DFS 同步双指针)

判断一棵树是否对称,本质上是判断它的左子树和右子树是否互为镜像

这需要我们派出两个指针 lr,分别去巡视左子树和右子树。巡视的规则必须像照镜子一样:

  1. 基本盘校验
    • 如果 lr 都为空,说明对称(到了叶子节点的下面)。
    • 如果 lr 只有一个为空,或者它们的值不相等,说明不对称,直接判死刑(false)。
  2. 镜像前行(核心魔法)
    • 外侧对外侧 :左指针往左走的同时,右指针必须往右走,去比较 l->leftr->right
    • 内侧对内侧 :左指针往右走的同时,右指针必须往左走,去比较 l->rightr->left
    • 只有当外侧和内侧都对称时,这棵树才是真正的对称树。

💻 C++ 代码实现 (极简递归版)

cpp 复制代码
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        // 如果树为空,天然对称;否则开启双指针镜像递归
        return !root || dfs(root->left, root->right);
    }

    bool dfs(TreeNode* l, TreeNode* r)
    {        
        // 1. 两人同时走到空节点,说明一路过来都对称
        if (!l && !r) return true;
        // 2. 只有一人为空,或者两人的值不相等,结构/数值被破坏,不对称
        else if (!l || !r || l->val != r->val) return false;
        
        // 3. 镜像递归:比较外侧节点 && 比较内侧节点
        return dfs(l->left, r->right) && dfs(l->right, r->left);
    }
};
相关推荐
如竟没有火炬4 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi84 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
Qt程序员6 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
想吃火锅10056 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
qeen876 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
王老师青少年编程7 小时前
信奥赛C++提高组csp-s之搜索进阶(记忆化搜索案例实践3)
c++·记忆化搜索·方格取数·csp·信奥赛·csp-s·提高组
Titan20248 小时前
Linux动静态库
linux·服务器·c++
j_xxx404_8 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai
wuminyu8 小时前
Java锁机制之park和unpark源码剖析
java·linux·c语言·jvm·c++
玖玥拾9 小时前
C/C++ 基础笔记(十一)类的进阶
c语言·c++·设计模式·