LeetCode热题100--101. 对称二叉树--简单

1. 题目

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

示例 1:

输入:root = 1,2,2,3,4,4,3

输出:true

示例 2:

输入:root = 1,2,2,null,3,null,3

输出:false

2. 题解

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) {
        return root == null || recur(root.left,root.right);
    }
    boolean recur(TreeNode L , TreeNode R){
        if(L == null && R == null) return true;
        if(L == null || R == null || L.val != R.val) return false;
        return recur(L.left , R.right) && recur(L.right , R.left);
    }
}

3. 解析

  1. public boolean isSymmetric(TreeNode root): 这是主方法,接收一个类型为TreeNode的参数root。这个参数表示二叉树的根节点。如果输入的根节点(也就是整个二叉树)不存在或者左子树和右子树对称(即recur函数返回true),那么方法返回true;否则,返回false。

  2. boolean recur(TreeNode L , TreeNode R){: 这是辅助递归方法。它接收两个类型为TreeNode的参数L和R,分别表示左子树的根节点和右子树的根节点。如果两棵子树都为空(即它们都是叶节点或空树),那么这个函数返回true;否则,它会判断以下条件:

  • 如果其中一棵子树为空但另一棵不为空,那么这两棵子树不能被视为镜像。因此,这两个分支的递归调用都将返回false。
  • 如果两棵子树都不为空且它们的根节点的值相等(即这些位置上的元素相同),那么我们需要比较左子树的左孩子和右子树的右孩子以及左子树的右孩子和右子树的左孩子。只有当这两个条件都满足时(也就是说两棵子树是镜像对应的),这个函数才返回true。
  1. return recur(L.left , R.right) && recur(L.right , R.left);: 在上面的条件判断之后,我们使用这行代码来递归地调用辅助方法recur(),以比较左子树的左孩子和右子树的右孩子以及左子树的右孩子和右子树的左孩子。
  • 如果这两组节点(左子树的左孩子和右子树的右孩子;以及左子树的右孩子和右子树的左孩子)都满足条件,那么这两个函数调用将返回true,并且整个表达式recur(L.left , R.right) && recur(L.right , R.left)也将返回true。
  • 否则,它会返回false。
相关推荐
Thecozzy1 小时前
大厂 AI Coding 面试大招
人工智能·面试·职场和发展
半夏微凉半夏殇1 小时前
x11与weston对比,优先选哪个
leetcode·均值算法·eclipse
2501_906565122 小时前
数学之美探究
算法
oier_Asad.Chen2 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
Dr.kangder2 小时前
嵌入式面试总结(十五)——异常处理
单片机·面试·职场和发展·系统架构·嵌入式
leisoo80973 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
luj_17686 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
郝学胜-神的一滴6 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆6 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
Water_Sunzhipeng7 小时前
2024牛客暑期多校训练营1
算法