101.对称二叉树

2023-10-26

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

1

/
2 2
/ \ /
3 4 4 3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

1

/
2 2
\
3 3


方法1

根左右遍历一次树得到数组,根右左遍历一次得到数组
对比,相等则对称
存在根左右与根右左相等的子树,便使用某个数来标记全部空结点防止出现这种情况

/**
 * 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:
    void leorder(TreeNode*root,vector <int>&arrleft)
    {
        if(!root){arrleft.push_back(-1);return;}
        arrleft.push_back(root->val);
        leorder(root->left,arrleft);
        leorder(root->right,arrleft);

    }
    void riorder(TreeNode*root,vector <int>&arrright)
    {
        if(!root){arrright.push_back(-1);return;}
        arrright.push_back(root->val);
        riorder(root->right,arrright);
        riorder(root->left,arrright);

    }
    bool isSymmetric(TreeNode* root) {
        vector<int>arrleft;
        vector<int>arrright;
        leorder(root,arrleft);
        riorder(root,arrright);
        if(arrleft==arrright)return 1;
        else return 0;


    }
};

当然,这个方法不够聪明


方法二:

使用两个指针分部从左边右边遍历即可,使用原理为递归

/**
 * 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 check(TreeNode*p,TreeNode* q)
    {
        if(!q&&!p)return true;
        if(!p||!q)return false;
        return (p->val==q->val)
        &&check(p->left,q->right)
        &&check(p->right,q->left);
    }

    bool isSymmetric(TreeNode* root) {
        return check(root,root);
    }
};

方法三:

利用队列,类似于层序遍历来迭代它,也可以说是广度搜索(或许

/**
 * 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 check(TreeNode* u,TreeNode* v)
    {
        queue<TreeNode*>que;
        que.push(u);que.push(v);
        while(!que.empty())
        {  u=que.front();que.pop();
           v=que.front();que.pop();
        if(!u&&!v)continue;
        if((!u||!v)||u->val!=v->val)return false;
        que.push(u->left);
        que.push(v->right);

        que.push(u->right);
        que.push(v->left);

        }
        return true;
    }
    bool isSymmetric(TreeNode* root) {
        return check(root,root);

    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

101.对称二叉树 的相关文章

随机推荐

  • apache beam 入门之beam-sql

    目录 apache beam 个人使用经验总结目录和入门指导 Java 就像spark sql 一样 apache beam也有beam sql 就是能够输入1张模拟数据表 然后通过sql语句来实现计算 举个例子 我们不希望在数据源端执行
  • kafka面试题目

    kafka面试 一 Kafka中的ISR InSyncRepli OSR OutSyncRepli AR AllRepli 代表什么 二 Kafka中的HW LEO等分别代表什么 三 Kafka中是怎么体现消息顺序性的 四 Kafka中的分
  • 改写对象的行为—多态

    前言 多态 Polymorphism 按字面的意思就是 多种状态 在面向对象语言中 接口的多种不同的实现方式即为多态 引用Charlie Calverts对多态的描述 多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术 赋值之后
  • 成功解决curl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file...

    最近在执行下述命令连接外网时 遇到了下述问题 求助多方后终于找到解决方法 很简单 未安装curl库 所以很简单 pip install curl 由于我这里已经安装过了 所以无需再安装 完美解决
  • echarts tooltip悬浮框内容显示不全,如何解决

    前言 项目使用echarts过程中 鼠标移上去 悬浮框显示的内容太多 导致显示不全 或者需要自定义显示内容时 如何解决 现在提供一个简单的方法 简单示例 代码如下 示例 tooltip trigger item enterable true
  • IDEA在MAC环境中的使用小技巧

    最近 转战MacOS的平台进行代码开发 有一天 突然发现 IDEA中同样启动一个springboot项目往往需要20多秒钟 如下截图中所示 这就让我感到比较奇怪了 因为本身机器配置也没那么差 关键 我同时还在WINDOWS平台上也正在对这个
  • 全能电子地图下载器-获取离线地图瓦片的工具

    百度网盘 1 9 5早期版本 链接 https pan baidu com s 1k9QL3mJXDus6O071HSBrHA 提取码 bib6 打开百度网盘并解压以后 你得到的东西是这些 3 0最新版本 链接 百度网盘 请输入提取码 提取
  • 竖式问题 rust解法

    竖式问题 输入一个数字集合 数字之间没有空格 找出所有形如abc de 三位数乘以两位数 的算式 在完整的竖式中 所有数字都属于这个数字集合 输出所有竖式 每个竖式前应有编号 之后应有一个空行 样例输入 2357 输出 lt 1 gt 77
  • python中add函数_如何使用python中的add函数?

    之前向大家介绍过python中的求和函数sum函数 numpy中的sum函数 对于数组可以指定维度进行相加 numpy中还有另一种求和运算方法 即add函数 add函数不仅作用于numpy中加法运算 还用于set中添加元素 本文主要向大家介
  • uniapp - APP云打包、蒲公英平台发布APP的步骤

    一 uniapp 云打包 1 注册 dcloud 开发者 首先需要注册一个 dcloud 开发者的账号 dcloud开发者中心 登录 dcloud net cn 根据流程注册即可 2 云打包 已安卓为例 项目创建完成后 查看 dcloud
  • Python连接Gbase数据库

    在数据清洗和计算方面 Python比SQL的灵活性更强 本文记录使用Python读取Gbase数据库中的数据 建立数据库连接 无论什么方法读取读取或操作数据库中的数据 首先要建立数据库连接对象 import pandas as pd imp
  • 如何学习python(附实际操作方法)

    人工智能在发展 Python作为人工智能的首选语言 自然也越来越火爆 现在 Python可以说是备受程序员欢迎的编程语言了 但是 有很多同学却不知道该从何处下手 接下来小编就跟大家聊聊吧 首先 我们要准备一台电脑 Windows7 10系统
  • parted3 Linux分区命令

    原贴地址 http www junfcom cn post 184 html Parted是一个着名的命令行工具 可以轻松管理硬盘分区 它可以帮助您添加 删除 缩小和扩展磁盘分区及其上的文件系统 从第一次出来 分手已经走了很长的路 其中一些
  • 谈谈管理者绩效管理要点

    作者 李石 链接 https www zhihu com question 19626322 answer 29165823 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 在绩效管理中衡量一个管理者的绩效与
  • 2023-05-22 题目

    1 java的泛型 泛型是jdk 5 引入的 泛型就是 引用类型作为参数 本质就是参数化类型 1 类型擦除 java的泛型基本上都是在编译器这个层次来实现的 在生成的字节码文件中是不包含泛型类中的信息的 泛型参数在编译的时候被去掉的过程叫做
  • 关于安卓系统安全性的问题

    引言 很久以前有人声称使用安卓系统不安全 称其获取的用户权限过多 太过于暴露用户的隐私 很多人在贴下反讽 只是你不会使用权限管理而已 而实际上现在 很多安卓应用程序一旦禁用了某些权限就直接限制用户的使用 完全就是一种流氓姿态 限制权限已经不
  • 前端学习路线(2023)

    这个前端学习路线看起来很详细和全面 涵盖了从基础知识到高级框架 从单机开发到全栈项目 从混合应用到原生应用 从性能优化到架构设计的各个方面 如果你能够按照这个路线学习和实践 我相信你一定能够成为一名优秀的前端工程师 不过 我也要提醒你 这个
  • ModuleNotFoundError: No module named 'encodings'

    问题描述 Fatal Python error Py Initialize unable to load the file system codec ModuleNotFoundError No module named encodings
  • 三极管和MOS管的使用及区别

    1 三极管 单片机IO口输出高电平时 三极管导通 单片机IO口输出低电平时 三极管截止 1 三极管是电流控制型元件 三极管的BE之间可以理解为存在一个二极管的通路 当给B加高电平时 BE之间就会产生持续的电流 维持三极管打开的条件就是BE之
  • 101.对称二叉树

    给定一个二叉树 检查它是否是镜像对称的 例如 二叉树 1 2 2 3 4 4 3 是对称的 1 2 2 3 4 4 3 但是下面这个 1 2 2 null 3 null 3 则不是镜像对称的 1 2 2 3 3 方法1 根左右遍历一次树得到