剑指 Offer 12. 矩阵中的路径

该文章提供了一种用Java实现的方法来判断一棵二叉树是否对称。通过对左右子树进行深度优先搜索(DFS)并比较它们的值和结构,递归地检查树的对称性。在代码中,`bfs`函数通过比较左右子节点的值和递归其左右子树来实现这一功能。
摘要由CSDN通过智能技术生成

题目

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

样例

在这里插入图片描述

思路分析

采用左右两个节点,同时向下递归进行判断

代码实现

package 剑指offer.搜索与回溯.offer28;

public class Solution {


    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
        TreeNode() {
        }


    }


    /**
     * 思路分析:
     * 第一种:直接构建他的镜像树,然后逐一遍历是否相同
     *
     * 第二种:直接遍历各个节点,镜像树交换后,再与原来的值进行比较。
     *
     *
     * 第三种:采用递归,使用两个节点,一个从左出发,一个从右出发,走的方向是相反的来进行递归
     * @param root
     * @return
     */
    public boolean isSymmetric(TreeNode root) {

        if(root == null){
            return true;
        }

        boolean bfs = bfs(root.left, root.right);

        return bfs;


    }

    public boolean bfs(TreeNode L,TreeNode R){

        if(L == null&& R == null){
            return true;
        }

        if(L == null && R != null){
            return false;
        }

        if(L != null && R == null){
            return false;
        }

        //就是当前节点不满足则直接返回false
        if(!(L.val == R.val)){
            return false;
        }

        //这一步:从step1-step2,L向左递归完成,R向右递归完成
        Boolean res1 = bfs(L.left,R.right);

        //这一步:完成step3
        Boolean res2 = bfs(L.right,R.left);

        //脑海模拟后续流程,能成功完成后续

        return res1&res2;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值