LeetCode算法递归类——剑指 Offer 28. 对称的二叉树

目录

[剑指 Offer 28. 对称的二叉树](#剑指 Offer 28. 对称的二叉树)

题解:

代码:

运行结果:


剑指 Offer 28. 对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

1
/ \
2 2
/ \ / \
3 4 4 3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

1
/ \
2 2
\ \
3 3

示例 1:

复制代码
输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

复制代码
输入:root = [1,2,2,null,3,null,3]
输出:false

限制:

0 <= 节点个数 <= 1000

题解:

  • 首先判断根节点是否为空,若为空则返回true。
  • 接着调用fun方法,传入根节点的左子节点和右子节点进行判断。

fun方法的逻辑是:

  • 如果A和B都为空,则返回true;
  • 如果A和B有一个为空或者值不相等,则返回false;
  • 否则递归判断A的左子节点和B的右子节点是否对称,以及A的右子节点和B的左子节点是否对称。
  • 最终,通过递归层层返回结果,得出是否对称的判断结果。

时间复杂度为O(n)

代码:

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null) return true;
        return fun(root.left,root.right);
    }
    public boolean fun(TreeNode A,TreeNode B){
        if(A==null&&B==null) return true;
        if(A==null||B==null||A.val!=B.val) return false;
        return fun(A.left,B.right)&&fun(A.right,B.left);
    }
}

运行结果:

相关推荐
kida_yuan1 分钟前
【从零开始】13. 数据增强(Data Augmentation)
数据结构·python·nlp
Ada_疯丫头5 分钟前
杰伊·温格罗教我数据结构与算法
算法
小白开始进步10 分钟前
机器人集群调度算法简介与实现思路
算法·机器人
好易学·数据结构22 分钟前
可视化图解算法60: 矩阵最长递增路径
数据结构·算法·leetcode·力扣·递归·回溯算法·牛客
SamsongSSS1 小时前
JavaScript逆向SM国密算法
javascript·算法·逆向
图灵信徒1 小时前
2025 ICPC Gran Premio de Mexico 3ra Fecha
c++·算法·codeforcrs
大锦终1 小时前
【算法】栈专题
数据结构·c++·算法·leetcode
haogexiaole1 小时前
资源图分配算法
算法
天选之女wow1 小时前
【代码随想录算法训练营——Day6(Day5周日休息)】哈希表——242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和
数据结构·算法·leetcode·散列表
寒冬没有雪1 小时前
利用归并算法对链表进行排序
c++·算法