我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++如何判断对称树

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++如何判断对称树

本篇内容介绍了“C++如何判断对称树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

判断对称树

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1
/
2   2
/    /

3  4 4  3

But the following is not:

    1
/
2   2
  
3    3

Note:
Bonus points if you could solve it both recursively and iteratively.

判断二叉树是否是平衡树,比如有两个节点n1, n2,我们需要比较n1的左子节点的值和n2的右子节点的值是否相等,同时还要比较n1的右子节点的值和n2的左子结点的值是否相等,以此类推比较完所有的左右两个节点。我们可以用递归和迭代两种方法来实现,写法不同,但是算法核心都一样。

解法一:

class Solution {public:    bool isSymmetric(TreeNode *root) {        if (!root) return true;        return isSymmetric(root->left, root->right);    }    bool isSymmetric(TreeNode *left, TreeNode *right) {        if (!left && !right) return true;        if (left && !right || !left && right || left->val != right->val) return false;        return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);    }    };

迭代写法需要借助两个队列queue来实现,我们首先判空,如果root为空,直接返回true。否则将root的左右两个子结点分别装入两个队列,然后开始循环,循环条件是两个队列都不为空。在while循环中,我们首先分别将两个队列中的队首元素取出来,如果两个都是空结点,那么直接跳过,因为我们还没有比较完,有可能某个结点没有左子结点,但是右子结点仍然存在,所以这里只能continue。然后再看,如果有一个为空,另一个不为空,那么此时对称性已经被破坏了,不用再比下去了,直接返回false。若两个结点都存在,但是其结点值不同,这也破坏了对称性,返回false。否则的话将node1的左子结点和右子结点排入队列1,注意这里要将node2的右子结点和左子结点排入队列2,注意顺序的对应问题。最后循环结束后直接返回true,这里不必再去check两个队列是否同时为空,因为循环结束后只可能是两个队列均为空的情况,其他情况比如一空一不空的直接在循环内部就返回false了,参见代码如下:

解法二:

class Solution {public:    bool isSymmetric(TreeNode* root) {        if (!root) return true;        queue<TreeNode*> q1, q2;        q1.push(root->left);        q2.push(root->right);        while (!q1.empty() && !q2.empty()) {            TreeNode *node1 = q1.front(); q1.pop();            TreeNode *node2 = q2.front(); q2.pop();            if (!node1 && !node2) continue;            if((node1 && !node2) || (!node1 && node2)) return false;            if (node1->val != node2->val) return false;            q1.push(node1->left);            q1.push(node1->right);            q2.push(node2->right);            q2.push(node2->left);        }        return true;    }};

“C++如何判断对称树”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++如何判断对称树

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++如何判断对称树

本篇内容介绍了“C++如何判断对称树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!判断对称树Given a binary tree, che
2023-06-19

怎么用C++判断对称树

本篇内容主要讲解“怎么用C++判断对称树”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C++判断对称树”吧!判断对称树Given a binary tree, check whether
2023-06-20

java如何判断字符串是否对称

判断字符串是否对称可以通过以下步骤实现:1. 判断字符串长度是否为偶数,如果为奇数,则不可能对称,直接返回false。2. 使用两个指针,一个指向字符串的首字符,一个指向字符串的尾字符。3. 比较首尾字符是否相等,如果不相等,则字符串不对称
2023-08-24

刷题系列 - Python判断是否镜像对称二叉树

继续刷题,判断是否镜像对称二叉树。镜像对称二叉树,顾名思义,以根节点为轴,左右节点和节点内容互为镜像;如下图所示。这里要避免和完全二叉树混淆。这个我还是考虑了一段时间,递归和迭代都可以实现。递归的,如果一个节点值作为输入很难实现,所以新建一
2023-06-02

C++实现判断相同树的功能

本篇内容主要讲解“C++实现判断相同树的功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现判断相同树的功能”吧!判断相同树Given two binary trees, write a
2023-06-20

java如何判断一个字符串是前后对称的

这篇文章将为大家详细讲解有关java如何判断一个字符串是前后对称的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何判断一个字符串是前后对称的?什么意思呢?就好像一个字符串,前后一折,是对称的。就像你站在
2023-06-27

java如何判断子类对象

在Java中,可以使用`instanceof`关键字来判断一个对象是否为某个类的子类对象。`instanceof`用法如下:```javaif (object instanceof Subclass) {// object是Subclass
2023-09-22

c语言如何判断整数

通过使用%运算符判断整数在c语言中的正负性、奇偶性。具体方法包括:检查正整数(大于0)、检查负整数(小于0)、检查零(等于0)、检查偶数(除以2余数为0)、检查奇数(除以2余数不为0)。如何使用 C 语言判断整数在 C 语言中,可以通过使
c语言如何判断整数
2024-05-22

c++合法常量如何判断

在C++中,合法的常量可以按照以下几个规则来判断:整数常量:以数字开头,可以包含0-9的数字,以及可选的正负号(+/-)。例如:0, 123, -45。浮点数常量:以数字开头,可以包含0-9的数字,以及可选的正负号(+/-),可以包含小数点
2023-10-23

c语言如何判断位数

判断一个数字的位数,可以使用循环结构和除法运算来实现。以下是一个判断位数的示例代码:#include int main() {int num;int count = 0;printf("请输入一个整数:");scanf("%d", &n
2023-10-23

用Python如何判断不同类型的二叉树

二叉树是一种树状数据结构,其中每个父节点最多可以有两个子节点。二叉树的类型完全二叉树完全二叉树是一种特殊类型的二叉树,其父节点存在2种情况,要么有2个子节点,要么没有子节点,详情如下图:完全二叉树定理1、叶数为i+12、节点总数
用Python如何判断不同类型的二叉树
2024-01-23

c语言如何判断奇偶数

判断一个数是否为奇数或偶数可以使用取余操作。如果一个数除以2的余数为0,则该数为偶数,否则为奇数。具体代码如下:```c#include int main() {int num;printf("请输入一个整数:");scanf("%d",
2023-09-28

C语言中如何实现判断

本篇内容主要讲解“C语言中如何实现判断”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中如何实现判断”吧!(一)先动手编写一个程序:#include int main(){
2023-06-17

C语言中如何判断质数

这篇文章主要介绍了C语言中的判断质数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录