【算法/剑指Offer】请实现一个函数,用来判断一颗二叉树是不是对称的。

2023-11-15

题目描述

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。


代码很简单,关键还是知道怎么样才能判断一个

二叉树是否对称,只要采用前序、中序、后序、层次遍历等任何一种遍历方法,分为先左后右和先

右后左两种方法,只要两次结果相等就说明这棵树是一颗对称二叉树。


迭代版本

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root==NULL) return true;
        queue<TreeNode*> q1,q2;
        TreeNode *left,*right;
        q1.push(root->left);
        q2.push(root->right);
        while(!q1.empty() and !q2.empty())
        {
            left = q1.front();
            q1.pop();
            right = q2.front();
            q2.pop();
            //两边都是空
            if(NULL==left && NULL==right)
                continue;
            //只有一边是空
            if(NULL==left||NULL==right)
                return false;
             if (left->val != right->val)
                return false;
            q1.push(left->left);
            q1.push(left->right);
            q2.push(right->right);
            q2.push(right->left);
        }
         
        return true;
         
    }
};

递归版本

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
/*
思路:如果先序遍历的顺序分为两种先左后右和先右后左两种顺序遍历,如果两者相等说明二叉树是对称的二叉树
 
*/
class Solution {
public:
    bool isSymmetrical(TreeNode* pRoot)
    {
        return isSymmetrical(pRoot,pRoot);
    }
     
    bool isSymmetrical(TreeNode* pRoot1,TreeNode* pRoot2)
    {
        if(pRoot1==NULL&&pRoot2==NULL)
            return true;
        if(pRoot1==NULL || pRoot2==NULL)           
            return false;
        if(pRoot1->val!=pRoot2->val)
            return false;
        return isSymmetrical(pRoot1->left,pRoot2->right) && isSymmetrical(pRoot1->right,pRoot2->left);
         
    }
 
};

 

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

【算法/剑指Offer】请实现一个函数,用来判断一颗二叉树是不是对称的。 的相关文章

  • HTML5 CSS3学习

    HTML5 CSS3学习 http www 1000zhu com course css3 HTML5 相关书籍 http www html5cn com cn news gdt 2013 05 11 276 html 转载于 https
  • Queen on Grid_dp

    思想很单纯 gt dp Code 代码解释 dp i j ans 1 i 1 j 竖着过来 dp i j mod dp i j ans 2 i j 1 横着过来 dp i j mod dp i j ans 3 i 1 j 1 斜着过来 dp

随机推荐

  • Java实现快排算法

    快排算法的思想用笔画画其实不难理解 但是当我想用代码写出来时发现没那么简单 好久没接触这些基本的知识又忘了 在此做个笔记 我对快排的理解是 从数组的第一个数字开始 每轮确定一个数字的正确位置 当所有数字的位置确定好了 也就排好序了 一 先用
  • STM32初学入门笔记(3):STM32CubeMX配置STM32实现多通道ADC+DMA读取模拟量

    模拟信号的读取是我们在做很多项目是都要用到的 而模拟量的读取就要依赖于ADC数模转换器 对于初学者 学习使用ADC可以很大的帮助以后的STM32学习 目录 ADC简介 DMA简介 工程开始 STM32CubeMX配置区 配置外部时钟 配置调
  • Git 开发必备 .gitignore 详解!【建议收藏】

    作者 Linux猿 简介 CSDN博客专家 C C 面试 刷题 算法尽管咨询我 关注我 有问题私聊 关注专栏 Linux 优质好文持续更新中 目录 一 为什么使用 gitignore 二 使用规则 2 1 注释 2 2 忽略文件 2 3 忽
  • 移动支付那点事儿

    关于本文支付相关的源码详见我的开源项目MobilePayment 前言 移动支付其实是非常简单的 因为只要按照第三方的文档来就行了 所以在本次分享中 其实更像是一次开发的纪要 当然也有一些看点 做过支付的人都知道支付的难点其实是在第三方文档
  • 狂神说Go语言学习笔记(一)

    狂神说Go语言学习笔记 二 狂神说Go语言学习笔记 三 狂神说Go语言学习笔记 四 一 Go语言的发展史 二 Go语言能做什么 三 Go语言环境安装 下载地址 国外网站太慢 我们使用中文网进行下载 Go下载 Go语言中文网 Golang中文
  • 海伯利安生态内用户如何实现资产跨链?意义何在!

    随着ERC20高额的转账Gas费和网络拥堵问题日益突显 越来越多的用户感受到了前所未有的高操作成本 直呼转不起账了 没法玩了 那么为了减缓用户压力 海伯利安技术团队目前正在紧张地部属基于Heco生态链与Atlasl链之间的跨链桥 帮助用户在
  • Python制作【大麦网】抢票程序,看演唱会再也不怕没票了

    前言 大麦网 是中国综合类现场娱乐票务营销平台 业务覆盖演唱会 话剧 音乐剧 体育赛事等领域 但是因为票数有限 还有黄牛们不能丢了饭碗 所以导致了 很多人都抢不到票 那么 今天带大家用Python来制作一个自动抢票的脚本小程序 知识点 面向
  • PyTorch错误收集与解决方法

    PyTorch错误收集与解决方法 文章目录 PyTorch错误收集与解决方法 RNN的初始状态在多GPU训练报错 RuntimeError module must have its parameters and buffers on dev
  • matlab中怎么获取文件路径,matlab获取文件路径和读写二进制文件

    1 matlab中处理路径和文件名 主要用到2个函数 pathstr name ext versn fileparts filename fileparts函数返回文件路径各部分的信息 在返回的参数中 pathstr表示文件路径 name是
  • 使用vscode remote ssh功能远程连接服务器或树莓派时,报错Setting up SSH tunnel的终极解决办法,全网仅此一份

    当你想用vscode remote ssh 功能远程开发linux服务器 树莓派时 vscode server文件创建完成 但是一直显示卡在 Setting up SSH Host lt 你的用户名 gt Setting up SSH tu
  • Kendo UI开发教程(1): 概述

    JavaScript 在开发Web应用的作用越来越大 JQuery简化了HTML和JavaScript之间的操作 jQuery的教程可以参见本博客jQuery和 jQuery UI 入门教程 jQuery UI 是一套 JavaScript
  • 前端开发程序员的月薪到底有多高?

    前几天微信公开课上 张小龙现场展示了 跳一跳 听说还会邀请最会 跳 的人去其办公室一决高下 不由让人下定决心苦练神功 以见张大佬一面 不管是小程序的横空出世 还是Web应用的大量涌现 它们都掀起了一波 前端开发需求热 给前端开发工程师们带来
  • RedisTemplate读取包含指定前缀的Key的value

    文章已同步到个人博客 http www tianshaojiao com p 2140 一 需求 我在做im开发的时候 往往需要在redis中存入客户端与服务端的连接信息 这些连接信息都是有指定前缀的 如下图所示 现在如果想要推送消息到所有
  • 【华为OD机试真题2023 JS】Linux发行版的数量

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 Linux发行版的数量 知识点DFS搜索BFS搜索并查集 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 Linux操作系统有多个发行版 distrowatch
  • -std=c99带来问题

    今天用 std c99编译c文件 内容是信号这一块的 包含了sigprocmask 编译时发现总是显示sigset t类型没有声明 函数中的3个状态的无法找到 后来发现把 std c99去掉就行了 不知道有什么区别
  • 15 玩转STM32之IIC通信(芯片硬件篇)

    15 1 IIC控制器说明 硬件部分 在14 玩转STM32之IIC通信 软件模拟篇 我们讲了软件模拟的方式 本章讲解芯片自带的硬件部分 并非所有的芯片都含有IIC 像51系列的是没有的 但是绝大多数是有的 根据我用过的S32 STM32
  • 高通 ADSP sensor SSC

    1 添加入口函数 adsp sensors dd qcom inc sns dd h extern sns ddf driver if s sns dd
  • 实战:单点登录的两种实现方式,附源码

    最近工作有点忙 好久没更新文章了 正好这两天在整理单点登陆相关的文档 今天趁着小孩睡着了 赶紧码一篇实战文交差 概念 单点登录 Single Sign On SSO 是一种身份验证服务 允许用户使用单个标识来登录多个应用程序或系统 如下图所
  • 关于vue-cli2.9.6 使用vue-video-player,视频播放rtmp视频流error:in ./node_modules/videojs-swf/dist/video-js.swf

    我在做vue前端开发项目的时候 领导让我在别人项目的基础上进行二次开发 我将自己的页面合并至平台 我用的vue cli版本是2 6 9 然后我按照正常流程 引入vue video player video js等 然后配置playerOpt
  • 【算法/剑指Offer】请实现一个函数,用来判断一颗二叉树是不是对称的。

    题目描述 请实现一个函数 用来判断一颗二叉树是不是对称的 注意 如果一个二叉树同此二叉树的镜像是同样的 定义其为对称的 代码很简单 关键还是知道怎么样才能判断一个 二叉树是否对称 只要采用前序 中序 后序 层次遍历等任何一种遍历方法 分为先