对称二叉树

🔗 对称二叉树

题目来源:101. 对称二叉树 – 力扣(LeetCode)

📌 题目描述

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

即:二叉树是否以根节点为中心,左右两棵子树互为镜像。

✅ 示例解析

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true
解释:左子树 [2,3,4] 与右子树 [2,4,3] 互为镜像,整体结构对称。

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false
解释:左子树为 [2,null,3],右子树为 [2,null,3],但位置不对称(左子树的右孩子 vs 右子树的右孩子),不满足镜像条件。

示例 3:

输入:root = [1]
输出:true
解释:单个节点天然对称。

⚠️ 提示

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

💡 解法:递归(双指针镜像比较)—— O(n) 时间,O(h) 空间

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return dfs(root.left, root.right);
    }

    public boolean dfs(TreeNode left, TreeNode right) {
        if (left == null && right == null) {
            return true;
        }
        if (left == null || right == null || left.val != right.val) {
            return false;
        }
        return dfs(left.left, right.right) && dfs(left.right, right.left);
    }
}

📊 复杂度分析

  • 时间复杂度:O(n)
    最坏情况下需要遍历所有节点(每个节点被访问一次),因此时间复杂度为 O(n)。
  • 空间复杂度:O(h)
    递归调用栈的深度取决于树的高度 h。最坏情况(链状树)为 O(n),平均情况(平衡树)为 O(log n)。

🧩 解题思路

核心思想:镜像对比
判断一棵树是否对称,等价于判断它的左子树和右子树是否互为镜像

如何判断两棵树互为镜像?

  1. 它们的根节点值相等;
  2. 第一棵树的左子树 与 第二棵树的右子树 对称;
  3. 第一棵树的右子树 与 第二棵树的左子树 对称。

这天然适合用递归实现。

递归终止条件:

  • 两个节点都为空 → 对称 ✅
  • 其中一个为空或值不等 → 不对称 ❌
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇