【力扣】[Java版] 刷题笔记-101. 对称二叉树

题目:101. 对称二叉树

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

解题思路

可以理解为遍历对比,最简单的方法就是递归。

解题过程

递归:左右子树分开遍历,左子树遵循根、左、右的顺序,右子树循序根、右、左,将结果进行对比。

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 void leftTravel(TreeNode root, List<Integer> res) {
        if (root == null) {
            res.add(null);
            return;
        }
        res.add(root.val);
        leftTravel(root.left, res);
        leftTravel(root.right, res);
    }

    public void rightTravel(TreeNode root, List<Integer> res) {
        if (root == null) {
            res.add(null);
            return;
        }
        res.add(root.val);
        rightTravel(root.right, res);
        rightTravel(root.left, res);
    }

    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        if (root.left == null && root.right == null) {
            return true;
        }

        // 左子树 根 左 右
        TreeNode left = root.left;
        List<Integer> resL = new ArrayList();
        leftTravel(left, resL);
        // 右子树 根 右 左
        TreeNode right = root.right;
        List<Integer> resR = new ArrayList();
        rightTravel(right, resR);
        // 对比 是否一致
        return resL.equals(resR);

    }
}

这个还可以简化,直接递归对比结果,代码如下

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 compare(TreeNode left, TreeNode right) {
        if (left == null && right == null) {
            return true;
        }
        if (left == null || right == null) {
            return false;
        }
        return left.val == right.val && compare(left.left, right.right) &&         
         compare(left.right, right.left);
    }

    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        return compare(root.left, root.right);
    }
}
相关推荐
CODE_RabbitV4 分钟前
【保姆级实操版 - STM32 系列笔记】新手入门STM32第一课:CubeMX+Keil MDK实现LED点灯
笔记·stm32·嵌入式硬件
黎阳之光4 分钟前
AI数智筑防线 绿色科技启新篇,如何用硬核技术赋能生态安全双升级
人工智能·科技·算法·安全·数字孪生
2201_758642647 分钟前
自定义内存检测工具
开发语言·c++·算法
Westward-sun.13 分钟前
矿物分类实战(一):从异常值到标准化——数据清洗全流程拆解
人工智能·算法·机器学习·数据清洗
hjxu201619 分钟前
【OpenClaw 龙虾养成笔记二】 自定义新的技能 Hello world
笔记·openclaw
D_C_tyu21 分钟前
HTML | 结合Canvas开发具有智能寻路功能的贪吃蛇小游戏实战详解
javascript·算法·游戏·html·bfs
小王不爱笑13226 分钟前
HashMap 扩容全流程
java·数据结构·算法
代码探秘者28 分钟前
【算法篇】4.前缀和
java·数据库·后端·python·算法·spring
计算机安禾28 分钟前
【数据结构与算法】第4篇:算法效率衡量:时间复杂度和空间复杂度
java·c语言·开发语言·数据结构·c++·算法·visual studio
那山川31 分钟前
ros学习笔记1~14
笔记·学习·机器人