leetcode 101. 对称二叉树

这篇具有很好参考价值的文章主要介绍了leetcode 101. 对称二叉树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2023.7.2

leetcode 101. 对称二叉树

         这道题要求我们判断一颗二叉树是否是对称的。我使用的是广度优先搜索的思想,通过队列将需要比较的节点依次入队和出队,进行对称性的判断。下面直接上代码:

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        queue<TreeNode*> que;
        que.push(root->left);
        que.push(root->right);
        while(!que.empty())
        {
            TreeNode* leftnode = que.front(); que.pop();
            TreeNode* rightnode = que.front(); que.pop();
            
            //左右两节点都是空节点 也属于对称
            if(leftnode==nullptr && rightnode==nullptr) continue;
            //一节点为空另一节点不为空或者两节点值不同 都属于不对称的情况
            if(leftnode==nullptr || rightnode==nullptr || leftnode->val!=rightnode->val) return false;

            que.push(leftnode->left);
            que.push(rightnode->right);
            que.push(leftnode->right);
            que.push(rightnode->left);
        }
        return true;
    }
};

        每次入队入两个节点,并且分别是左右子树的,然后进行对称性的判断,若满足对称条件则将左节点的左孩子和右节点的右孩子先入队,再将左节点的右孩子和右节点的左孩子入队。


2023.10.20

        二刷。java代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        Queue<TreeNode> que = new LinkedList<>();
        que.add(root.left);
        que.add(root.right);
        while(!que.isEmpty()){
            TreeNode leftNode = que.remove();
            TreeNode rightNode = que.remove();
            if(leftNode == null && rightNode == null) continue;
            if(leftNode == null || rightNode == null || leftNode.val != rightNode.val) return false;
            que.add(leftNode.left);
            que.add(rightNode.right);
            que.add(leftNode.right);
            que.add(rightNode.left);
        }
        return true;
    }
}

        java中的队列和cpp中的操作有些许不同,这里稍微总结一下:

        Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了。Queue最常见的实现类有LinkedList。 Queue的6个方法分类:文章来源地址https://www.toymoban.com/news/detail-514792.html

  • 压入元素(添加):add()、offer()
    • 相同:未超出容量,从队尾压入元素,返回压入的那个元素。
    • 区别:在超出容量时,add()方法会对抛出异常,offer()返回false。
  • 弹出元素(删除):remove()、poll()
    • 相同:容量大于0的时候,删除并返回队头被删除的那个元素。
    • 区别:在容量为0的时候,remove()会抛出异常,poll()返回false。
  • 获取队头元素(不删除):element()、peek()
    • 相同:容量大于0的时候,都返回队头元素。但是不删除。
    • 区别:容量为0的时候,element()会抛出异常,peek()返回null。

到了这里,关于leetcode 101. 对称二叉树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【递归】【后续遍历】【迭代】【队列】Leetcode 101 对称二叉树

    ---------------🎈🎈对称二叉树 题目链接🎈🎈------------------- 时间复杂度O(N) 空间复杂度O(N)

    2024年02月19日
    浏览(40)
  • Day15|leetcode层序遍历(10道题)、226.翻转二叉树、101.对称二叉树

    视频链接:讲透二叉树的层序遍历 | 广度优先搜索 | LeetCode:102.二叉树的层序遍历_哔哩哔哩_bilibili 看完视频可以一口气做十道题!(102、107、199、637、429、515、116、117、104、111) 二叉树的层序遍历如图所示: 题目链接:226. 翻转二叉树 - 力扣(LeetCode) 视频链接:听说一位

    2024年02月11日
    浏览(79)
  • 算法训练day15Leetcode102二叉树层序遍历226翻转二叉树101对称二叉树

    https://www.bilibili.com/video/BV1ue4y1Y7Mf/?vd_source=8272bd48fee17396a4a1746c256ab0ae 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先

    2024年01月18日
    浏览(56)
  • 代码随想录Day12 二叉树 LeetCode T102二叉树的层序遍历 T226 翻转二叉树 T101 对称二叉树

    本文思路和详细讲解来自于:代码随想录 (programmercarl.com) 题目链接:102. 二叉树的层序遍历 - 力扣(LeetCode) 本题使用队列辅助完成,讲解主要函数CheckOrder:首先判断root是否为空,是就直接返回,然后创建队列,向里加入root元素,计算队列的长度,也就是每一层的元素个数,while循环,si

    2024年02月06日
    浏览(47)
  • 力扣101 对称二叉树 Java版本

    给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3] 输出:false 提示: 树中节点数目在范围 [1, 1000] 内 -100 = Node.val = 100 进阶:你可以运用递归和迭代两种方法解决这个问题吗? 思路在代码中

    2024年02月22日
    浏览(40)
  • day15 | 层序遍历、 226.翻转二叉树、 101. 对称二叉树

    目录: 题目链接: 层序遍历 给你二叉树的根节点  root  ,返回其节点值的  层序遍历  。 (即逐层地,从左到右访问所有节点)。 随想录:借助一个队列实现。 102. 二叉树的层序遍历 107.二叉树的层次遍历 II 最后只需要将result的顺序改一下就行,但是注意,reverse是直接

    2024年02月08日
    浏览(77)
  • C++力扣题目101--对称二叉树

    力扣题目链接(opens new window) 给定一个二叉树,检查它是否是镜像对称的。   首先想清楚,判断对称二叉树要比较的是哪两个节点,要比较的可不是左右节点! 对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了 其实我们要比较

    2024年01月25日
    浏览(38)
  • 代码随想录day13 | 226.翻转二叉树 101.对称二叉树

    使用前、后序反转最为方便。 为啥不推荐中序? 中序遍历,某些节点的左右孩子会翻转两次,某些节点左右孩子不会被反转。 101.对称二叉树 关键在于,看这个节点对应的左子树和右子树是否可以相互反转。 1、如何比较呢? 比较的是两个子树的里侧和外侧的元素是否相等

    2024年02月15日
    浏览(39)
  • 【leetcode热题】对称二叉树

    难度: 简单 通过率: 42.2% 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树  [1,2,2,3,4,4,3]  是对称的。 但是下面这个  [1,2,2,null,3,null,3]  则不是镜像对称的: 说明: 如果你可以运用递归和迭代两种方法

    2024年02月20日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包