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

devtools/2024/11/13 15:29:38/

代码解决

/*** 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),因为需要存储递归调用的栈。


http://www.ppmy.cn/devtools/45944.html

相关文章

英伟达A100算力卡性能及应用

英伟达A100是一款高性能计算卡,基于英伟达Ampere架构,专为数据中心和高性能计算领域设计。以下是关于A100的性能参数及应用的详细介绍: 性能参数 架构与制程: 架构:Ampere制程:7纳米核心与频率&#xff1…

【DevOps】深入了解RabbitMQ:AMQP协议基础、消息队列工作原理和应用场景

目录 一、核心功能 二、优势 三、核心概念 四、工作原理 五、交换机类型 六、消息确认 七、持久性和可靠性 八、插件和扩展 九、集群和镜像队列 十、客户端库 十一、管理界面 十二、应用场景 RabbitMQ是一个基于AMQP协议的消息队列中间件,提供高可用、可…

算法训练 | 回溯算法Part3 | 39.组合总和、40.组合总和II、131.分割回文串

目录 39.组合总和 回溯法 40.组合总和II 回溯法 131.分割回文串 回溯法 39.组合总和 题目链接:39. 组合总和 - 力扣(LeetCode) 文章讲解:programmercarl.com 回溯法 解题思路 本题没有数量要求,可以无限重复…

媳妇面试了一家公司,期望月薪20K,对方没多问就答应了,只要求3天内到岗,可我总觉得哪里不对劲。

“20k!明天就来上班吧!” 听到这句话,你会不会两眼放光,激动得差点跳起来? 朋友媳妇小丽,最近就经历了这样一场“梦幻面试”。然而,事情的发展却远没有想象中那么美好…… “这公司也太好了吧…

字节裁员!开启裁员新模式。。

最近,互联网圈不太平,裁员消息此起彼伏。而一向以“狼性文化”著称的字节跳动,却玩起了“低调裁员”,用一种近乎“温柔”的方式,慢慢挤掉“冗余”的员工。 “细水长流”:裁员新模式? 不同于以往…

如何完全清除docker

目录 一、查看相关资源1.查看所有容器2.查看所有镜像3.查看所有未使用的网络4.查看所有未使用的卷 二、清除操作1.停止所有容器2.删除所有容器3.删除所有镜像4.删除所有未使用的网络5.删除所有未使用的卷6.重启Docker服务(可选,根据系统和配置可能需要&a…

do...while循环

基本语法 while循环,是先判断条件再执行。 do...while循环,是先斩后奏,先至少执行一次循环语句块中的逻辑,再判断是否继续。 do {//do while 循环语句块; } while (bool类型的值);注意:do...while语句,存…

LeetCode-77. 组合【回溯】

LeetCode-77. 组合【回溯】 题目描述:解题思路一:回溯背诵版解题思路三:0 题目描述: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入&a…