【leetcode】【初级算法】【树3】101 对称二叉树

题解

方法一 递归

class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        # 对称二叉树 两种方法 第一种递归 写一个函数 传入左和右 
        # 判断是否都为空 返回true 判断有一个是空一个不是返回false 判断左和右的值是不是相等 不相等直接退出 相等再递归
        if not root:
            return True
        def isequ(left,right)->bool:
            if not(left or right):
                return True
            if not(left and right):
                return False
            if left.val!=right.val:
                return False
            return isequ(left.left,right.right) and isequ(left.right,right.left)
        
        return isequ(root.left,root.right)
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        return isSymmetric(root.left,root.right);
        

    }
    public boolean isSymmetric(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 isSymmetric(left.left,right.right) && isSymmetric(left.right,right.left);
    }
    
}

方法二 迭代

class Solution {
    public boolean isSymmetric(TreeNode root) {
        // 迭代 
        // 判空
        if(root==null||(root.left==null && root.right==null)){
            return true;
        }
        // 定义队列 
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root.left);
        queue.offer(root.right);
        while(!queue.isEmpty()){
            TreeNode u=queue.poll();
            TreeNode v=queue.poll();
            if(u ==null && v==null){
                continue;
            }
            if((u==null||v==null)||(u.val!=v.val)){
                return false;
            }
            queue.offer(u.left);
            queue.offer(v.right);
            queue.offer(u.right);
            queue.offer(v.left);
            
        }
        return true;
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值