首页 > 其他分享 >【LeetCode】3.19 对称二叉树

【LeetCode】3.19 对称二叉树

时间:2023-03-21 11:02:54浏览次数:57  
标签:3.19 leftNode return queue add 二叉树 null root LeetCode

101. 对称二叉树

​ 给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1

image-20230319090233480
输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

image-20230319090252017
输入:root = [1,2,2,null,3,null,3]
输出:false

提示:

  • 树中节点数目在范围 [1, 1000]
  • -100 <= Node.val <= 100

进阶:你可以运用递归和迭代两种方法解决这个问题吗?

我的方法:老实巴交的层序遍历

​ 使用修改的层序遍历(为空时也添加null),根据队列上次添加的元素个数获得每一层的节点数(包含空节点),然后再判断每一层的节点是否对称(暴击循环或者根据kmp的next数组判断最大公共前后缀),emmm总之就是做得特别麻烦。

递归做法

​ 使用两个遍历同时循环判断,之前看题解做过一次,但是这次还是完全想不到,然后看了一眼想法直接写出来了,还需要多做啊

    public boolean isSymmetric(TreeNode root1, TreeNode root2) {
        if(root1 == null && root2 == null) {
            return true;
        } else if(root1 == null || root2 == null || root1.val != root2.val) {
            return false;
        } else {
            return isSymmetric(root1.left, root2.right)
                    && isSymmetric(root1.right, root2.left);
        }
    }

    public boolean isSymmetric(TreeNode root) {
        if(root == null) {
            return true;
        }
        return isSymmetric(root.left, root.right);
    }
非递归写法,类似层序遍历的写法

​ 再次献上我的膝盖,直接看代码可能不是太理解,自己画一下图模拟下队列的过程就会立刻明白了

public boolean isSymmetric(TreeNode root) {
    if(root == null) {
        return true;
    }
    Queue<TreeNode> queue = new LinkedList<>();
    queue.add(root.left);
    queue.add(root.right);
    while(!queue.isEmpty()) {
        TreeNode leftNode = queue.poll();
        TreeNode rightNode = queue.poll();
        if(leftNode == null && rightNode == null) {
            continue;
        }
        if(leftNode == null || rightNode == null || leftNode.val != rightNode.val) {
            return false;
        }
        queue.add(leftNode.left);
        queue.add(rightNode.right);
        queue.add(leftNode.right);
        queue.add(rightNode.left);
    }
    return true;
}
image-20230319094355765

标签:3.19,leftNode,return,queue,add,二叉树,null,root,LeetCode
From: https://www.cnblogs.com/tod4/p/17239184.html

相关文章

  • 合并链表-leetcode23-合并k个升序链表
    给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6......
  • 剑指 Offer 07. 重建二叉树(java解题)
    目录1.题目2.解题思路个人思路3.数据类型功能函数总结4.java代码1.题目输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍......
  • 代码随想录21 530.二叉搜索树的最小绝对差 | 501.二叉搜索树中的众数 | 236. 二
    530. 二叉搜索树的最小绝对差给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。classS......
  • Leetcode 7. 整数反转(模拟)
    题目链接在这里:7.整数反转-力扣(LeetCode)这道题学习了list类型不能在没有定义长度的情况下直接访问里面的第i个元素,应该使用append或者在开始的时候就a=[0for_inr......
  • 3.19 基本Dos命令
    常用的Dos命令1.盘符切换:(英文状态下)例C盘换D盘(直接在后边加所要换盘的名称和冒号)  2查看当前目录下的所有文件名    :   直接加Dir3切换目录(用cd......
  • leetcode 1592
    注意整行输入的格式#include<iostream>#include<sstream>usingnamespacestd;stringreorderSpaces(stringtext){stringwords[55];intn=text.size()......
  • #yyds干货盘点# LeetCode面试题:螺旋矩阵
    1.简述:给你一个m行n列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输......
  • N04、重建二叉树(给出前序中序,重建二叉树,好题 绝对的好题)
    ​​4、重建二叉树​​(给出前序中序,重建二叉树)好题绝对的好题输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重......
  • TZOJ 1222: 数据结构练习题――先序遍历二叉树 层次遍历
    描述 给定一颗二叉树,要求输出二叉树的深度以及先序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000。 输入 输入数据分为多组,第一行是测试数据的组数......
  • Leetcode 4. 寻找两个正序数组的中位数(二分)
    题目链接在这里:是一道很好的二分题,一开始没有想到越界怎么处理,忽略了(m+n)/2一定介于min(n,m)和max(n,m)之间,因此如果确定在短的数组上进行二分就不用考虑越界问题了,其次......