【数据结构与算法 经典例题】判断二叉树是否对称

news2024/11/13 13:16:44

              💓 博客主页:倔强的石头的CSDN主页 

             📝Gitee主页:倔强的石头的gitee主页

   ⏩ 文章专栏:《数据结构与算法 经典例题》C语言

                                  期待您的关注

1b7335aca73b41609b7f05d1d366f476.gif

 

目录

一、问题描述

二、解题思路

三、C语言实现代码 


 

一、问题描述

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

 

原题出自

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

ce5915b407df453a9c23ad43eb9863e5.jpeg

 

 

二、解题思路

判断一颗二叉树是否对称的解题思路可以通过比较两个子树是否镜像对称来实现。
具体地说,如果一棵树的左子树与右子树是镜像对称的,那么这棵树就是对称的。这个问题可以通过递归来解决。

 

解题思路如下:

  • 首先,比较根节点:如果二叉树为空,那么它是对称的(空树是对称的)。如果二叉树只有一个节点(即根节点),那么它也是对称的。
  • 其次,递归地比较左子树和右子树:对于非空树,我们需要递归地比较它的左子树和右子树。具体来说,我们需要先比较左子树和右子树的结构和数据是否相同,然后再交叉比较左子树的左子树和右子树的右子树,以及左子树的右子树和右子树的左子树。
  •  
  • 递归终止条件:在递归过程中,如果两个节点都为空,那么它们是对称的。如果只有一个节点为空,或者两个节点的值不相等,那么它们不是对称的。
  •  
  • 要注意的是解决这个问题需要两个函数实现:
  • 第一个函数接收一个树的根结点,判断树是否空以及调用子函数;
  • 第二个函数接收两个节点的值进行对比,这两个节点可能是左子树的根和右子树的根,也可能是左子树的右子树和右子树的左子树,或是左子树的左子树和右子树的右子树

 

三、C语言实现代码 

struct TreeNode {
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
    
};
typedef struct TreeNode TNode;

bool _isSymmetric(TNode* root1, TNode* root2)//子树判断函数
{
    if (root1 == NULL && root2 == NULL)
        return true;
    if (root1 == NULL || root2 == NULL)//结构对比
        return false;
    if (root1->val != root2->val)//数据对比
        return false;
    return _isSymmetric(root1->left, root2->right)//对左右子树的节点交叉判断
        && _isSymmetric(root1->right, root2->left);
}
bool isSymmetric(struct TreeNode* root)
{
    if (root == NULL)
        return true;
    return _isSymmetric(root->left, root->right);//调用子函数
}

413249af48e44189bc7035a18ca915ec.jpeg

 

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

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

相关文章

MySQL NaviCat 安装及配置教程(Windows)【安装】

文章目录 一、 MySQL 下载1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 激活 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址:https://www.mysql.com/…

Python | Leetcode Python题解之第237题删除链表中的节点

题目: 题解: class Solution:def deleteNode(self, node):node.val node.next.valnode.next node.next.next

OrangePi Aipro Ai计算测试

开发板配置 http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html CPU4核64位处理器 AI处理器GPU集成图形处理器AI算力8-12TOPS算力内存LPDDR4X:8GB/16GB(可选),速率:3200…

让AI语言模型自由飞翔:LangChain框架的奇妙世界

今天,我将为大家揭开一项令人激动的技术——LangChain。想象一下,如果能将人工智能的强大能力与我们日常使用的数据和工具无缝连接,那将开启怎样崭新且无限的可能! LangChain,一个专为大型语言模型设计的框架&#xf…

Linux FFmpeg安装教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Windows安装Pycharm及汉化教程

在安装好了Python之后呢,我们需要更方便的进行编写代码,使用Python自带的IDLE和命令行是不太友好的。 那么有没有一款免费好用的写代码工具呢?答案是有的! PyCharm 是由 JetBrains 打造的一款 Python IDE,提供代码分析…

【Django】网上蛋糕项目商城-注册,登录,修改用户信息,退出功能

概念 通过以上多篇文章的讲解,对该项目的功能已经实现了很多,本文将对该项目的用户注册,登录,修改用户信息,以及退出等功能的实现。 注册功能实现 点击head.html头部页面的注册按钮,触发超链接跳转至use…

K8s集群初始化遇到的问题

kubectl describe pod coredns-545d6fc579-s9g5s -n kube-system 找到原因1:CoreDNS Pod 处于 Pending 状态的原因是集群中的节点都带有 node.kubernetes.io/not-ready 污点 journalctl -u kubelet -f 14:57:59.178592 3553 remote_image.go:114] "PullIma…

火车行驶动态特效404单页源码

源码介绍 火车行驶动态特效404单页源码,白云飘飘,小火车带着not page found行驶远方,适合做网站错误页,将下面的代码放到空白的html文件里面,鼠标双击即可查看效果,或者上传到服务器,设置好重定向即可 效果预览 完整代码 <!DOCTYPE html> <html><head…

【ROS2】高级:实现自定义内存分配器

目标&#xff1a;本教程将展示在编写 ROS 2 C 代码时如何使用自定义内存分配器。 教程级别&#xff1a;高级 时间&#xff1a;20 分钟 目录 背景 编写分配器编写一个示例主程序将分配器传递到进程内管道测试和验证代码 TLSF 分配器 本教程将教您如何为发布者和订阅者集成自定义…

【个人笔记】685. 冗余连接 II 的解释(并查集)

一棵树有n个点和n条边&#xff0c;返回一条能删除的边&#xff0c;使得剩下的图是有 n 个节点的有根树。 解释&#xff1a; 注意不冗余的有根树的特性&#xff01;**根节点入度为0&#xff0c;其余结点只有一个入度&#xff01;**所以冗余的两种情况如下&#xff1a; &#xff…

jmeter持续学习之---控制器

IF控制器 下面这种写法jmeter不推荐有性能的问题 jmeter推荐勾选上的这种写法 使用"Interpret Condition as Variable Expression"工具的性能要好一些 循环控制器 ForEach控制器 与用户定义的变量或者正则表达式提取器配合使用,循环读取。用户定义的变量或者正则…

彻底改变时尚:使用 GAN 实现 AI 的未来

彻底改变时尚&#xff1a;使用 GAN 实现 AI 的未来 一、介绍 想象一下&#xff0c;在这个世界里&#xff0c;时装设计师永远不会用完新想法&#xff0c;我们穿的每一件衣服都是一件艺术品。听起来很有趣&#xff0c;对吧&#xff1f;好吧&#xff0c;我们可以在通用对抗网络 &a…

路网双线合并单线——ArcGISpro 解决方法

路网双线合并成单线是一个在地图制作、交通规划以及GIS分析中常见的需求。双线路网定义&#xff1a;具有不同流向、不同平面结构的道路。此外&#xff0c;车道数较多的道路&#xff08;例如&#xff0c;双黄实线车道数大于4的道路&#xff09;也可以视为双线路网&#xff0c;本…

C++相关概念和易错语法(22)(final、纯虚函数、继承多态难点)

1.final final在继承和多态中都可以使用&#xff0c;在继承中是指不想将自己被继承&#xff0c;在多态中是指不想该函数被重写&#xff0c;比较简单&#xff0c;下面是一些使用例子。 2.纯虚函数 当我们需要抽象一个类的时候&#xff0c;我们就需要用到纯虚函数。所谓抽象的类…

深入理解I/O模型

目录 一、I/O 模型简介 二、I/O 模型 2.1 同步阻塞 I/O 2.2 同步非阻塞I/O 2.3 I/O多路复用 2.4 异步I/O 2.5 信号驱动 I/O 三、总结 一、I/O 模型简介 所谓的 I/O 就是计算机内存与外部设备之间拷贝数据数据的过程。有 5 中 I/O 模型&#xff0c;分别是同步阻塞 I/O、同步…

单端、差分信号处理抗干扰能力解析

采用仪表运放对信号源进行处理&#xff0c; 信号源地上有共模干扰&#xff0c;经过差分信号处理后Vout上不会有干扰&#xff0c;差分信号可以非常好的抗共模干扰。 经过差分信号处理后&#xff0c;以单端信号输出进入ADC还是会有干扰&#xff0c;所以信号链采用差分 处理后&…

Java二十三种设计模式-适配器模式(6/23)

适配器模式&#xff1a;使不兼容的接口协同工作的桥梁 引言 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许不兼容的接口之间可以一起工作&#xff0c;通过将一个类的接口转换成客户端期望的另一个接口。 在计算机编程中&#x…

AI论文精读笔记-MAE

1. 论文基本信息 论文标题&#xff1a;Masked Autoencoders Are Scalable Vision Learners 作者&#xff1a;Kaiming He∗,† Xinlei Chen∗ Saining Xie Yanghao Li Piotr Doll ́ ar Ross Girshick 发表时间和期刊&#xff1a;19 Dec 2021; arxiv 论文链接&#xff1a;Mas…

苹果预计因Apple Intelligence引发设备升级潮

&#x1f989; AI新闻 &#x1f680; 苹果预计因Apple Intelligence引发设备升级潮 摘要&#xff1a;据彭博社报道&#xff0c;摩根士丹利将苹果列为首选股票&#xff0c;预期Apple Intelligence发布将引发创纪录的设备升级。分析师Erik Woodring 将苹果目标股价上调至273美元…