165.二叉树:对称二叉树(力扣)

代码解决

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool compare(TreeNode* left, TreeNode* right)
    {
        // 两个子节点都为空,说明是对称的
        if (left == nullptr && right == nullptr) return true;
        // 只有一个子节点为空,说明不对称
        if (left == nullptr || right == nullptr) return false;
        // 两个子节点的值不相等,说明不对称
        if (left->val != right->val) return false;

        // 递归比较外侧和内侧节点
        bool outside = compare(left->left, right->right);
        bool inside = compare(left->right, right->left);

        // 只有外侧和内侧都对称,整个树才对称
        return outside && inside;
    }

    bool isSymmetric(TreeNode* root) 
    {
        // 空树是对称的
        if (root == nullptr) return true;
        // 检查左右子树是否对称
        return compare(root->left, root->right);
    }
};
  1. 定义一个比较函数 compare,它接受两个 TreeNode* 类型的参数,代表要比较的两个子节点。
  2. 在 compare 函数中,首先检查两个子节点是否都为空,如果是,则返回 true。
  3. 如果只有一个子节点为空,则返回 false。
  4. 如果两个子节点的值不相等,则返回 false。
  5. 递归地调用 compare 函数来比较外侧节点(左子节点的左子节点和右子节点的右子节点)和内侧节点(左子节点的右子节点和右子节点的左子节点)。
  6. 如果外侧和内侧节点都对称,则返回 true,否则返回 false。
  7. 在 isSymmetric 函数中,首先检查根节点是否为空,如果是,则返回 true。
  8. 调用 compare 函数来比较根节点的左子树和右子树是否对称。

这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是树中节点的数量。空间复杂度也是 O(n),因为需要存储递归调用的栈。

相关推荐
夜不会漫长10 小时前
C++:红黑树
数据结构·算法
文丑颜不良啊10 小时前
LeetCode1661~1680题目解析
java·leetcode
AI备案指南-满满11 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor11 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David11 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事12611 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI11 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..11 小时前
【C语言】扫雷游戏
c语言·算法·游戏
丘山录11 小时前
本地部署 LongCat-2.5,要 7 台机器我只有 4 台
人工智能·算法
Allen_LVyingbo12 小时前
NVIDIA CUDA Tile 在医疗计算中的算子形式化、算法重构与内核实现
大数据·python·算法·重构·知识图谱·健康医疗·数据库架构