返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++如何判断对称树
  • 308
分享到

C++如何判断对称树

2023-06-19 13:06:01 308人浏览 独家记忆
摘要

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

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

--结束END--

本文标题: C++如何判断对称树

本文链接: https://lsjlt.com/news/296250.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++如何判断对称树
    本篇内容介绍了“C++如何判断对称树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!判断对称树Given a binary tree, che...
    99+
    2023-06-19
  • 怎么用C++判断对称树
    本篇内容主要讲解“怎么用C++判断对称树”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C++判断对称树”吧!判断对称树Given a binary tree, check whether ...
    99+
    2023-06-20
  • C++实现LeetCode(101.判断对称树)
    [LeetCode] 101.Symmetric Tree 判断对称树 Given a binary tree, check whether it is a mirror of it...
    99+
    2024-04-02
  • TypeScript判断对称的二叉树方案详解
    目录前言实现思路实现代码示例代码前言 如果一颗二叉树和它的镜像一样,那么它就是对称的。实现一个函数用于判断一颗二叉树是否对称,你会怎么做? 本文将分享一种解决方案,欢迎各位感兴趣的开...
    99+
    2024-04-02
  • java如何判断字符串是否对称
    判断字符串是否对称可以通过以下步骤实现:1. 判断字符串长度是否为偶数,如果为奇数,则不可能对称,直接返回false。2. 使用两个...
    99+
    2023-08-24
    java
  • 刷题系列 - Python判断是否镜像对称二叉树
    继续刷题,判断是否镜像对称二叉树。镜像对称二叉树,顾名思义,以根节点为轴,左右节点和节点内容互为镜像;如下图所示。这里要避免和完全二叉树混淆。这个我还是考虑了一段时间,递归和迭代都可以实现。递归的,如果一个节点值作为输入很难实现,所以新建一...
    99+
    2023-06-02
  • C++实现LeetCode(100.判断相同树)
    [LeetCode] 100. Same Tree 判断相同树 Given two binary trees, write a function to check if they a...
    99+
    2024-04-02
  • java如何判断一个字符串是前后对称的
    这篇文章将为大家详细讲解有关java如何判断一个字符串是前后对称的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何判断一个字符串是前后对称的什么意思呢就好像一个字符串,前后一折,是对称的。就像你站在镜子...
    99+
    2023-06-27
  • C++实现判断相同树的功能
    本篇内容主要讲解“C++实现判断相同树的功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现判断相同树的功能”吧!判断相同树Given two binary trees, write a...
    99+
    2023-06-20
  • C#判断语句的表达式树实现
    C# 提供了以下类型的判断语句: 语句描述if一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。if...else一个 if 语句 后...
    99+
    2024-04-02
  • php如何判断对象为空
    在php中判断对象是否为空的方法使用empty()函数判断$a = 0;$b = '';$c = array();f (empty($a)) e...
    99+
    2024-04-02
  • java如何判断子类对象
    在Java中,可以使用`instanceof`关键字来判断一个对象是否为某个类的子类对象。`instanceof`用法如下:```j...
    99+
    2023-09-22
    java
  • c++合法常量如何判断
    在C++中,合法的常量可以按照以下几个规则来判断: 整数常量:以数字开头,可以包含0-9的数字,以及可选的正负号(+/-)。例如...
    99+
    2023-10-23
    c++
  • c语言如何判断位数
    判断一个数字的位数,可以使用循环结构和除法运算来实现。 以下是一个判断位数的示例代码: #include int main() ...
    99+
    2023-10-23
    c语言
  • c语言如何判断整数
    通过使用%运算符判断整数在c语言中的正负性、奇偶性。具体方法包括:检查正整数(大于0)、检查负整数(小于0)、检查零(等于0)、检查偶数(除以2余数为0)、检查奇数(除以2余数不为0)。...
    99+
    2024-05-22
    c语言
  • 用Python如何判断不同类型的二叉树
    二叉树是一种树状数据结构,其中每个父节点最多可以有两个子节点。 二叉树的类型 完全二叉树 完全二叉树是一种特殊类型的二叉树,其父节点存在2种情况,要么有2个子节点,要么没有子节点,详情如下图: 完全二叉树定理 1、叶数为i+1 2...
    99+
    2024-01-23
  • C语言详解判断相同树案例分析
    目录一、题目描述二、解题思路题目难度:简单 一、题目描述 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则...
    99+
    2024-04-02
  • C语言中如何实现判断
    本篇内容主要讲解“C语言中如何实现判断”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中如何实现判断”吧!(一)先动手编写一个程序:#include <stdio.h>...
    99+
    2023-06-17
  • c语言如何判断奇偶数
    判断一个数是否为奇数或偶数可以使用取余操作。如果一个数除以2的余数为0,则该数为偶数,否则为奇数。具体代码如下:```c#inclu...
    99+
    2023-09-28
    c语言
  • C语言中如何判断质数
    目录C语言判断质数C语言判断素数的函数正确代码如下总结C语言判断质数 写判断质数的程序时,需特别注意边界条件: 1.开始边界条件:2作为第一位质数,不参与循环; 2.循环主体:div...
    99+
    2023-03-03
    C语言判断质数 C语言判断 C语言质数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作