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);
    }
}

运行结果:

相关推荐
Jay2002111几秒前
【机器学习】23-25 决策树 & 树集成
算法·决策树·机器学习
dragoooon342 分钟前
[优选算法专题九.链表 ——NO.53~54合并 K 个升序链表、 K 个一组翻转链表]
数据结构·算法·链表
松涛和鸣4 分钟前
22、双向链表作业实现与GDB调试实战
c语言·开发语言·网络·数据结构·链表·排序算法
xlq223226 小时前
22.多态(上)
开发语言·c++·算法
666HZ6666 小时前
C语言——高精度加法
c语言·开发语言·算法
sweet丶6 小时前
iOS MMKV原理整理总结:比UserDefaults快100倍的存储方案是如何炼成的?
算法·架构
云里雾里!7 小时前
力扣 209. 长度最小的子数组:滑动窗口解法完整解析
数据结构·算法·leetcode
CoderYanger8 小时前
递归、搜索与回溯-穷举vs暴搜vs深搜vs回溯vs剪枝:12.全排列
java·算法·leetcode·机器学习·深度优先·剪枝·1024程序员节
憨憨崽&8 小时前
进击大厂:程序员必须修炼的算法“内功”与思维体系
开发语言·数据结构·算法·链表·贪心算法·线性回归·动态规划
chem41119 小时前
C 语言 函数指针和函数指针数组
c语言·数据结构·算法