iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现LeetCode(101.判断对称树)
  • 499
分享到

C++实现LeetCode(101.判断对称树)

2024-04-02 19:04:59 499人浏览 薄情痞子
摘要

[LeetCode] 101.Symmetric Tree 判断对称树 Given a binary tree, check whether it is a mirror of it

[LeetCode] 101.Symmetric Tree 判断对称树

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++实现LeetCode(101.判断对称树)的文章就介绍到这了,更多相关C++实现判断对称树内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实现LeetCode(101.判断对称树)

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • C++实现LeetCode(101.判断对称树)
    [LeetCode] 101.Symmetric Tree 判断对称树 Given a binary tree, check whether it is a mirror of it...
    99+
    2024-04-02
  • 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(100.判断相同树)
    [LeetCode] 100. Same Tree 判断相同树 Given two binary trees, write a function to check if they a...
    99+
    2024-04-02
  • TypeScript判断对称的二叉树方案详解
    目录前言实现思路实现代码示例代码前言 如果一颗二叉树和它的镜像一样,那么它就是对称的。实现一个函数用于判断一颗二叉树是否对称,你会怎么做? 本文将分享一种解决方案,欢迎各位感兴趣的开...
    99+
    2024-04-02
  • C++实现判断相同树的功能
    本篇内容主要讲解“C++实现判断相同树的功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现判断相同树的功能”吧!判断相同树Given two binary trees, write a...
    99+
    2023-06-20
  • C#判断语句的表达式树实现
    C# 提供了以下类型的判断语句: 语句描述if一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。if...else一个 if 语句 后...
    99+
    2024-04-02
  • 刷题系列 - Python判断是否镜像对称二叉树
    继续刷题,判断是否镜像对称二叉树。镜像对称二叉树,顾名思义,以根节点为轴,左右节点和节点内容互为镜像;如下图所示。这里要避免和完全二叉树混淆。这个我还是考虑了一段时间,递归和迭代都可以实现。递归的,如果一个节点值作为输入很难实现,所以新建一...
    99+
    2023-06-02
  • C++实现LeetCode(208.实现字典树(前缀树))
    [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树) Implement a trie with insert,&...
    99+
    2024-04-02
  • mysqlwhere中如何判断不为空的实现
    mysql是开源免费的关系型数据库,由于其是免费的,所以使用也是比较广泛的。 mysql数据库的空分为两种:Null、空字符串 本文将针对这些空演示如何判断是否为空,以及如何写sql...
    99+
    2024-04-02
  • C++实现LeetCode(110.平衡二叉树)
    [LeetCode] 110.Balanced Binary Tree 平衡二叉树 Given a binary tree, determine if it is height-ba...
    99+
    2024-04-02
  • C++实现LeetCode(168.求Excel表列名称)
    [LeetCode] 168.Excel Sheet Column Title 求Excel表列名称 Given a positive integer, return its cor...
    99+
    2024-04-02
  • C++实现LeetCode(98.验证二叉搜索树)
    [LeetCode] 98. Validate Binary Search Tree 验证二叉搜索树 Given a binary tree, determine if it is ...
    99+
    2024-04-02
  • C++实现LeetCode(99.复原二叉搜索树)
    [LeetCode] 99. Recover Binary Search Tree 复原二叉搜索树 Two elements of a binary search tree (BST...
    99+
    2024-04-02
  • C++实现LeetCode(112.二叉树的路径和)
    [LeetCode] 112. Path Sum 二叉树的路径和 Given a binary tree and a sum, determine if the tree has a...
    99+
    2024-04-02
  • C++实现LeetCode(102.二叉树层序遍历)
    [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历 Given a binary tree, return the&#...
    99+
    2024-04-02
  • C++实现水仙花数判断实例
    目录前言一、思路分析二、代码实现1.水仙花函数2.完整代码总结前言 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital ...
    99+
    2024-04-02
  • C语言中如何实现判断
    本篇内容主要讲解“C语言中如何实现判断”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中如何实现判断”吧!(一)先动手编写一个程序:#include <stdio.h>...
    99+
    2023-06-17
  • C++实现LeetCode(144.二叉树的先序遍历)
    [LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历 Given a binary tree, return the...
    99+
    2024-04-02
  • C++实现LeetCode(104.二叉树的最大深度)
    [LeetCode] 104. Maximum Depth of Binary Tree 二叉树的最大深度 Given a binary tree, find its maximum...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作