给定一个二叉树,检查它是否是自身的镜像(即,围绕其中心对称)

本文介绍了一种检查二叉树是否为自身镜像的方法,即判断树是否围绕其中心对称。通过递归比较节点值和左右子树结构,实现了一个高效算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个二叉树,检查它是否是自身的镜像(即,围绕其中心对称)。例如,这个二叉树[1,2,2,3,4,3,3]是对称的:但是以下[ 1,2,2,null,3,null,3]不是:

package com.example.tree;

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

package com.example.tree;

/**
 * Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
 * For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
 * But the following [1,2,2,null,3,null,3] is not:
 */
public class SolutionToMirrorOfItself {

    public static boolean isSymmetric(TreeNode root) {
        return check(root,root,"root");
    }

    private static boolean check(TreeNode r1, TreeNode r2 ,String flag){
        System.out.println("flag = " + flag);
        if(r1 == null && r2 == null)
            return true;
        if(r1 == null || r2 == null)
            return false;
        if(r1.val == r2.val){
            Boolean flags = check(r1.left,r2.right,"L")&&check(r1.right,r2.left,"R");
            return flags;
        }else{
            return false;
        }
    }

    //[1,2,2,3,4,4,3]
    public static void main(String[] args) {
        TreeNode root = new TreeNode(1);
        TreeNode t1 = new TreeNode(2);
        TreeNode t2 = new TreeNode(2);
        TreeNode t3 = new TreeNode(3);
        TreeNode t4 = new TreeNode(4);
        TreeNode t5 = new TreeNode(4);
        TreeNode t6 = new TreeNode(3);

        TreeNode t7 = new TreeNode(5);
        TreeNode t8 = new TreeNode(6);
        TreeNode t9 = new TreeNode(7);
        TreeNode t10 = new TreeNode(8);
        TreeNode t11 = new TreeNode(8);
        TreeNode t12 = new TreeNode(7);
        TreeNode t13 = new TreeNode(6);
        TreeNode t14 = new TreeNode(5);

        root.left = t1;
        root.right = t2;
        t1.left = t3;
        t1.right = t4;
        t2.left = t5;
        t2.right = t6;

        t3.left = t7;
        t3.right = t8;
        t4.left = t9;
        t4.right = t10;
        t5.left = t11;
        t5.right = t12;
        t6.left = t13;
        t6.right = t14;


        System.out.println(isSymmetric(root));
    }

}



备注:博主微信公众号,不定期更新文章,欢迎扫码关注。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值