当前位置: 首页 > news >正文

【leetcode hot 100 101】对称二叉树

解法一:递归

同时满足下面的条件,两个树互为镜像:

  • 它们的两个根结点具有相同的值
  • 每个树的右子树都与另一个树的左子树镜像对称:我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p 左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称。
/**
 * 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 check(root.left, root.right);
    }

    public boolean check(TreeNode left, TreeNode right){
        if(left==null && right==null){
            return true;
        }
        if(left==null || right==null){
            return false;
        }
        return left.val==right.val && check(left.left, right.right) && check(left.right, right.left);
    }
}

注意:

  • 循环传入的是根的左右节点,而不是根节点:check(root.left, root.right)
  • 正确性的判断还需要left.val==right.val

相关文章:

  • Vue开发者工具(VueDevtools)下载与安装
  • Huggingface科研代码学习(自定义模型开发)
  • SpringBoot 第一课(Ⅰ)--框架结构
  • 订单超时自动取消功能如何设计
  • 自然语言处理预训练模型的研究综述
  • C++——STL 常用的排序算法
  • C++使用ZeroMQ和MessagePack实现简单又轻量级的RPC框架
  • Spring是如何管理事务的
  • Blender-MCP服务源码2-依赖分析
  • 汽车感性负载-智能高边钳位能量计算
  • LeetCode 3110.字符串的分数:模拟(注意一个小细节)
  • 《基于机器学习(xgboost)的人体卡路里消耗预测系统》开题报告
  • phpstudy+phpstorm+xdebug【学习笔记】
  • PreparedStatement:Java 数据库操作的安全与高效之道
  • 找工作、创业的思考和出路
  • 基于CSV构建轻量级数据库:SQL与Excel操作的双模实践
  • 【快速入门】MyBatis
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(43)阴阳镜照连通 - 岛屿数量(DFS、BFS)
  • 使用CLINE来实现智能家居控制系统
  • c#Winform也可以跨平台了GTK框架GTKSystem.Windows.Forms
  • 沙青青评《通勤梦魇》︱“人机组合”的通勤之路
  • 经济日报整版聚焦:上海构建法治化营商环境,交出高分答卷
  • 独行侠以1.8%概率获得状元签,NBA原来真的有剧本?
  • 继71路之后,上海中心城区将迎来第二条中运量公交
  • 长三角议事厅·周报|从模速空间看上海街区化AI孵化模式
  • 上海护师邢红获第50届南丁格尔奖,她为何能摘得护理界最高荣誉