对称的二叉树(算法题)

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

例如:二叉树 [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

class Solution {
    boolean n=true;
    public boolean isSymmetric(TreeNode root) {
        if(root==null||(root.left==null&&root.right==null))
            return true;
        if(root.left==null||root.right==null)
            return false;
        hui(root.left,root.right); //进入递归
        return this.n;
    }
    
    void hui(TreeNode root,TreeNode tree){
        if(this.n==false)  //当n为false时,二叉树已经不对称,不在进行下面的判断
            return;
        if(root==null&&tree==null)
            return;
        if(root==null||tree==null){ //tree和root一个为空时,二叉树不对称
            this.n=false;
            return;
        }
        if(root.val!=tree.val){ 
            this.n=false;
            return;
        }
        hui(root.left,tree.right);
        hui(tree.left,root.right);
    }
}

解析:这个问题采用递归的方法,从最上方的根节点向下依次判断,将左节点看做root,右节点看成tree,每次root左移时,tree右移,保证root和tree一直处于对称的位置。判断root和tree是否相等,若不相等,则证明该二叉树是不对称的。如果tree和root有一项为空而另一项不为空,则该二叉树也是不对称的。

题目链接:对称的二叉树 - 对称的二叉树 - 力扣(LeetCode)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值