剑指[28]_对称的二叉树

题目来源:剑指 Offer 28. 对称的二叉树
题目描述

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

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

    1
   / \
  2   2
 / \ / \
3  4 4  3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

 

示例 1:

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

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

限制:
0 <= 节点个数 <= 1000

考虑用递归的办法,先把树的根结点左右结点放入;

  • 这时左右结点若同时为空;那么直接返回对称;
  • 左右结点若一边为空的,另一边有值,那么直接断定必然不是对称的;
  • 左右结点的值要是不相等,那么直接就是不对称的;
  • 注意在递归的时候比较的是,左子树的左结点和右子树的右结点; 还有 左子树的右结点和右子树的左结点

在这里插入图片描述

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

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

public class Solution {
    public boolean isSymmetric(TreeNode root) {
        //首先判断空树
        if (root == null) return true;

        //把左右子树放入;进行判断;
        return isResult(root.left, root.right);
    }

    private boolean isResult(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 isResult(left.left,right.right) && isResult(left.right, right.left);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小智RE0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值