【LeetCode】101. 对称二叉树(JAVA)

练习题:对称二叉树

  • 题目要求

给定一个二叉树,检查它是否是镜像对称的。

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

解:

      本题用递归解法的话,代码相对更好编写一些。

      问题在于如何递归:
      首先可以知道,如果给的树是一棵空树,那么一定是一颗对称二叉树。否则,只要判断根节点的左右节点是否是对称的,就可以知道这是不是一颗对称二叉树。

      那么如何判断左右子树是否对称呢,我们需要一个辅助函数来完成,函数需要的参数就是两棵树。从实例中可以得到,当左子树做孩子和右子树的右孩子对称,左子树的右孩子和右子树的左孩子对称时,这两棵树就对称。根据这个想法编码即可得到解。

代码如下(JAVA):

    public boolean sam(TreeNode lef,TreeNode righ){
        if(lef==null&&righ==null){
            return true;
        }
        if(lef == null || righ == null) {
            return false;
        }
        if(lef.val==righ.val){
            if((sam(lef.left,righ.right))&&(sam(lef.right,righ.left))){
                return true;
            }
        }
        return false;
    } 
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        if(sam(root.left,root.right)){
            return true;
        }
        return false;
    }

 

来源:力扣(LeetCode)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值