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

怎么用C++判断对称树

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

怎么用C++判断对称树

本篇内容主要讲解“怎么用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;    }};

参考资料:

https://leetcode.com/problems/symmetric-tree/

https://leetcode.com/problems/symmetric-tree/discuss/33054/Recursive-and-non-recursive-solutions-in-Java

到此,相信大家对“怎么用C++判断对称树”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

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

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

怎么用C++判断对称树

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

下载Word文档

猜你喜欢

怎么用C++判断对称树

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

C++如何判断对称树

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

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

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

用c语言怎么判断素数

判断素数的方法有蛮力法和埃拉托斯特尼筛法。蛮力法通过逐一尝试从 2 到数字平方根的取模来判断素数,若取模结果有 0 则不是素数。埃拉托斯特尼筛法利用标记数组来跟踪从 2 到给定范围的素数,减少了判断复杂度。如何用 C 语言判断素数判断给定
用c语言怎么判断素数
2024-05-14

Python中怎么判断二叉树是否存

Python中怎么判断二叉树是否存,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。继续刷题,判断二叉树是否存在一条路径满足和值要求。这个名称描述很复杂,其实很简单
2023-06-02

C#中怎么判断浏览器应用

这篇文章给大家介绍C#中怎么判断浏览器应用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#判断浏览器是否接受Cookies的方法是什么呢?一种确定浏览器是否接受 Cookie 的方法是先编写一个 Cookie,然后再
2023-06-17

Java对象类型怎么判断

在Java中,可以使用`instanceof`关键字来判断一个对象的类型。`instanceof`关键字用于判断一个对象是否是某个类的实例,或者是否是其子类的实例。语法如下:```对象 instanceof 类名```如果对象是给定类的实例
2023-08-16

python怎么判断绝对路径

这篇文章主要介绍了python怎么判断绝对路径的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python怎么判断绝对路径文章都会有所收获,下面我们一起来看看吧。说明1、以/开头的路径与当前目录无关,称为绝对路径
2023-06-30

java怎么判断对象类型

在Java中,可以使用instanceof关键字来判断一个对象的类型。例如,可以使用以下代码来判断一个对象是否属于某个特定类:Object obj = new String("Hello");if(obj instanceof Stri
java怎么判断对象类型
2024-03-01

PHP怎么判断是否为平衡二叉树

本篇内容介绍了“PHP怎么判断是否为平衡二叉树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在二叉树中,有一种叫做平衡二叉树。今天我们就来介
2023-06-20

C#中怎么判断字符串

C#中怎么判断字符串,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#判断字符串应用之判断空字符串,首先明确””,null和string.Empty的区别:string.E
2023-06-17

c#怎么判断数据类型

在 c# 中,可以通过以下方法判断数据类型:typeof 操作符返回指定表达式的类型。gettype() 方法返回表示当前对象类型的 type 对象。is 操作符检查表达式是否与指定的类型兼容。as 操作符尝试将表达式转换为指定的类型。sw
c#怎么判断数据类型
2024-05-11

c语言怎么判断整数

c 语言中可使用以下方法判断整数:1. 使用 isdigit() 函数检查数字字符;2. 使用 isspace() 函数检查空白字符;3. 使用 isalpha() 函数检查字母字符。如何判断 C 语言中的整数在 C 语言中,我们可以使用
c语言怎么判断整数
2024-05-13

c语言怎么判断素数

判断一个数是否为素数,可以通过以下方法实现:1. 如果给定的数小于2,则它不是素数。2. 对于大于等于2的数,从2到其平方根之间的所有数,依次判断该数是否能被这些数整除。- 如果能被整除,则它不是素数,返回false。- 如果不能被整除,则
2023-08-11

C语言怎么判断字母

本文小编为大家详细介绍“C语言怎么判断字母”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么判断字母”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。用户输入一个字符,判断该字符是否为一个字母。实例#incl
2023-06-17

C语言怎么判断闰年

本文小编为大家详细介绍“C语言怎么判断闰年”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么判断闰年”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。直接条件判断闰年:#include in
2023-06-17

C#中怎么对注册表进行判断指定操作

C#中怎么对注册表进行判断指定操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。判断指定注册表项是否存在private bool IsRegeditExit(s
2023-06-18

编程热搜

  • 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动态编译

目录