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

数据结构与算法——Java实现 41.对称二叉树

目录

101. 对称二叉树

思路

代码

Java代码及测试用例


莫道浮云终蔽日

总有雾散云开时

昨日之深渊

今日之浅谈

    —— 24.10.20

101. 对称二叉树

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

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

思路

若要判断一个二叉树是否对称,只需要判断从根节点的下一层开始是否轴对称,判断轴对称只需要判断左孩子的左孩子节点是否与右孩子的右孩子节点相等,遍历到叶子节点,逐层进行判断,是否从根节点开始左孩子的左孩子…的左孩子与右孩子的右孩子……的右孩子节点完全相等


代码

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

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


Java代码及测试用例

public class LeetCode101SymmetryBinaryTree {
    public boolean isSymmetric(TreeNode root) {
        return check(root.left,root.right);
    }

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

    public static void main(String[] args) {
        TreeNode root = new TreeNode(
                1,
                new TreeNode(2,new TreeNode(3),new TreeNode(4)),
                new TreeNode(2,new TreeNode(4),new TreeNode(3))
        );
        LeetCode101SymmetryBinaryTree res =  new LeetCode101SymmetryBinaryTree();
        System.out.println(res.isSymmetric(root));

        TreeNode root1 = new TreeNode(
                11,
                new TreeNode(7,
                        new TreeNode(5,
                                new TreeNode(3),
                                new TreeNode(6)),
                        new TreeNode(9,
                                new TreeNode(2),
                                new TreeNode(8))
        ),
                new TreeNode(11,
                        new TreeNode(4,
                                new TreeNode(9),
                                new TreeNode(28)),
                        new TreeNode(5)
                )
        );

        System.out.println(res.isSymmetric(root1));
    }
}


http://www.kler.cn/news/358508.html

相关文章:

  • 基于FPGA的信号发生器verilog实现,可以输出方波,脉冲波,m序列以及正弦波,可调整输出信号频率
  • 2024-10-15 问AI: [AI面试题] 人工智能中使用了哪些不同的搜索算法?
  • 《Windows PE》7.3 遍历资源表
  • PostgreSQL学习笔记:PostgreSQL vs MySQL
  • 汽车票在线预订:SpringBoot技术实践
  • 探索程序之道:为什么要开发程序
  • R语言详解predict函数
  • Python 网络爬虫入门与实战
  • [C#][winform]基于yolov8的8种人脸表情检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面
  • copliot竞品——豆包MarsCode
  • YoloV10改进策略:注意力改进|DeBiFormer,可变形双级路由注意力|引入DeBiLevelRoutingAttention注意力模块(全网首发)
  • Java综合项目(day38)
  • 如何挑选可靠的全球HTTP代理?
  • 一、Linux:开源传奇在大数据领域的璀璨绽放
  • c4d渲染和3d渲染有什么区别?c4d和3dmax哪个容易学?
  • 数据结构-5.10.树和森林的遍历
  • K14836 加密通话(call)
  • qt QGraphicsEffect详解
  • 使用Dlib库实现疲劳检测
  • 1、HTML笔记