101. 对称二叉树【 力扣(LeetCode) 】

news2024/11/27 17:45:08

文章目录

  • 零、原题链接
  • 一、题目描述
  • 二、测试用例
  • 三、解题思路
    • 3.1 递归
    • 3.2 迭代
  • 四、参考代码
    • 4.1 递归
    • 4.2 迭代

零、原题链接


101. 对称二叉树

一、题目描述

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

进阶:你可以运用递归和迭代两种方法解决这个问题吗?

二、测试用例

示例 1:

在这里插入图片描述

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

示例 2:

在这里插入图片描述

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

提示:

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

三、解题思路

3.1 递归

  1. 基本思路:
      递归,比较对称位置的结点是否相同即可
  2. 具体思路:
    • 左子树结点和右子树结点有一个为空,另一个非空,则不轴对称;
    • 两个都是空,则轴对称;
    • 两个都不为空:
      • 值相同,则判断 左子树的左子树右子树的右子树 是否轴对称 且 左子树的右子树右子树的左子树 是否轴对称;
      • 值不同,则不是轴对称;

3.2 迭代

  1. 基本思路:
      迭代,用栈实现递归,还是比较对称位置的结点是否相同即可
  2. 具体思路:
    • 将左右子树入栈;
    • 只要栈非空:
      • 弹出两个元素,比较是否相同:
        • 相同,非空的话,将他们的左右子树间隔入栈,且顺序相反,即一个左右,一个右左;
        • 不相同,则不是轴对称;
    • 栈空,则表示是轴对称;

四、参考代码

4.1 递归

时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( l o g    n ) \Omicron(log\;n) O(logn)

/**
 * 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 isSymmetric(TreeNode* left, TreeNode* right) {
        if ((left == nullptr) ^ (right == nullptr))
            return false;
        else if (left == nullptr)
            return true;
        else {
            if (left->val == right->val)
                return isSymmetric(left->left, right->right) &&
                       isSymmetric(left->right, right->left);
            else
                return false;
        }
    }
    bool isSymmetric(TreeNode* root) {
        return isSymmetric(root->left, root->right);
    }
};

4.2 迭代

时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( l o g    n ) \Omicron(log\;n) O(logn)

/**
 * 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 isSymmetric(TreeNode* root) {
        vector<TreeNode*> stack;
        stack.push_back(root->left);
        stack.push_back(root->right);

        while (!stack.empty()) {
            TreeNode* left = stack.back();
            stack.pop_back();
            TreeNode* right = stack.back();
            stack.pop_back();

            if (left != nullptr && right != nullptr) {
                if (left->val == right->val) {
                    stack.push_back(left->left);
                    stack.push_back(right->right);
                    stack.push_back(left->right);
                    stack.push_back(right->left);
                } else {
                    return false;
                }
            } else if (left != nullptr || right != nullptr) {
                return false;
            }
        }

        return true;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO11改进|注意力机制篇|引入上下文锚注意力机制CAA

目录 一、【CAA】注意力机制1.1【CAA】注意力介绍1.2【CAA】核心代码 二、添加【CAA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【CAA】注意力机制 1.1【CAA】注意力介绍 CAA注意力机制的结构图如下&#xff0c;下面根据…

Selenium WebDriver和Chrome对照表

PS&#xff1a;我的没下载WebDriver 也没配置环境变量 也能用Selenium 网上有说把WebDriver放到chrome的安装目录并将路径配到path中【可能之前用playwright下载过】 查看浏览器版本号 在浏览器的地址栏&#xff0c;输入chrome://version/&#xff0c;回车后即可查看到对应版…

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 在健康意识日益增强的今天&#xff0c;如何为用户提供个性化、精准的卫生健康建议成为了一个亟待解决…

java中的多层循环控制,包括金字塔和九九乘法表的打印

多重循环控制 多重循环控制练习 多重循环控制 1.将一个循环放在另一个循环体内&#xff0c;就形成了嵌套循环。其中&#xff0c;for&#xff0c;while&#xff0c;do…while均可以作为外层循环和内层循环。【建议一般用两层&#xff0c;最多不要超过3层&#xff0c;否则代码的…

【前端】前端数据转化为后端数据

【前端】前端数据转化为后端数据 写在最前面格式化数组代码解释hasOwnProperty是什么&#xff1f; &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限…

k8s实战-3

k8s实战-3 一、Ingress1.安装2.测试 二、存储抽象1.环境准备2.PV和PVC3.ConfigMap4.Secret 总结 一、Ingress Ingress 类似于一个“网关”&#xff0c;它负责将外部 HTTP 请求路由到集群内的服务。你可以把它想象成一个“交通警察”&#xff0c;根据请求的 URL 和路径&#xf…

无锡自闭症康复寄宿学校:每天的康复方式揭秘

无锡自闭症康复寄宿学校的启示&#xff1a;揭秘广州星贝育园的日常康复方式 在自闭症儿童的教育与康复领域&#xff0c;每一所学校都在用自己的方式探索着前行的道路。无锡的自闭症康复寄宿学校以其独特的康复方式和显著的效果&#xff0c;为众多家庭带来了希望。而在广州&…

jvisualvm学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

前端工程化 - Vue

环境准备 Vue-cli是Vue官方提供的一个脚手架&#xff0c;用户快速生成一个Vue的项目模板。 Vue-cli提供了如下功能&#xff1a; 统一的目录结构本地调试热部署单元测试集成打包上线 需要安装Node.js 安装Vue-cli npm install -g vue/cli通过vue --version指令查看是否安装成…

蓝桥杯省赛真题打卡day4

[蓝桥杯 2013 省 A] 大臣的旅费 题目描述 很久以前&#xff0c;T 王国空前繁荣。为了更好地管理国家&#xff0c;王国修建了大量的快速路&#xff0c;用于连接首都和王国内的各大城市。 为节省经费&#xff0c;T 国的大臣们经过思考&#xff0c;制定了一套优秀的修建方案&am…

模电中二极管,三极管和电容的应用

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

使用 Python 遍历文件夹

要解决这个问题&#xff0c;使用 Python 的标准库可以很好地完成。我们要做的是遍历目录树&#xff0c;找到所有的 text 文件&#xff0c;读取内容&#xff0c;处理空行和空格&#xff0c;并将处理后的内容合并到一个新的文件中。 整体思路&#xff1a; 遍历子目录&#xff1…

三维模型点云化工具V1.0使用介绍:将三维模型进行点云化生成

三维软件绘制的三维模型导入之后&#xff0c;可以生成点云&#xff0c;用于替代实际的激光扫描过程&#xff0c;当然&#xff0c;主要是用于点云算法的测试和验证&#xff0c;没法真正模拟扫描的效果&#xff0c;因为太过于理想化了。 功能介绍 将三维软件绘制的三维模型变成…

一个月学会Java 第3天 对类的深刻认识

Day3 对类的深刻认识 第一章 方法 在Day2的时候已经浅浅的认识过类&#xff0c;但是还是不够深刻&#xff0c;我们现在来深刻的认识一下类是什么和他的结构&#xff0c;首先在认识类的结构之前我们需要再认识和了解这么一个东西&#xff0c;他就是——方法 方法(method)也叫函…

iMazing只能苹果电脑吗 Win和Mac上的iMazing功能有区别吗

在当今数字时代&#xff0c;管理和备份手机数据变得越来越重要。无论是转移照片、备份短信&#xff0c;还是管理应用程序&#xff0c;一个强大的工具可以大大简化这些操作。iMazing作为一款备受好评的iOS设备管理软件&#xff0c;已经成为许多用户的选择。但是&#xff0c;许多…

用manim实现Gram-Schmidt正交化过程

在线性代数中&#xff0c;正交基有许多美丽的性质。例如&#xff0c;由正交列向量组成的矩阵(又称正交矩阵)可以通过矩阵的转置很容易地进行反转。此外&#xff0c;例如&#xff1a;在由彼此正交的向量张成的子空间上投影向量也更容易。Gram-Schmidt过程是一个重要的算法&#…

GESP C++三级样题卷

&#xff08;满分&#xff1a;100 分 考试时间&#xff1a;90 分钟&#xff09; 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 1.下列关于负数的原码、反码、补码的描述中&#xff0c;正确的是( ) A 原码和反码互为按位取反&#xff08;符号位除外&…

[ComfyUI]Flux:太强了!任意扩图神器,小红书极致逼真风格出游打卡写实风

随着人工智能技术的不断发展&#xff0c;图像生成与反推技术已经成为了AI领域的一大热点。今天&#xff0c;我们就来为大家详细介绍一款由ComfyUI团队开发的超强图像反推工具——Flux&#xff0c;以及如何使用它实现任意扩图和极致逼真风格出游打卡写实风。 一、Flux&#xff…

k8s-集群部署1

k8s-集群部署1 一、基础环境准备二、docker环境准备三、k8s集群部署1.kubeadm创建集群2.使用kubeadm引导集群 总结 一、基础环境准备 首先&#xff0c;需要准备三个服务器实例&#xff0c;这里我使用了阿里云创建了三个实例&#xff0c;如果不想花钱&#xff0c;也可以在VM上创…

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式&#xff08;主流&#xff09;‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 5.1. 互斥锁实现 5.1.1…