python对称二叉树

这篇博客介绍了如何判断一棵二叉树是否对称,提供了两种方法:递归和非递归(双进双出)。递归方法通过对比每个节点的左右子节点来实现,非递归方法则使用队列进行层次遍历。在每一步中,检查对应节点的对称性,并继续比较它们的子节点,直至完成整棵树的检查。
摘要由CSDN通过智能技术生成

方法1:用层序遍历,一层层检测是否对称
方法2:递归或BFS,对应节点逐个比较,每次比较完一对节点(left,right),新增两对需比较结点
(left.left,right.right),(left.right,right.left),二叉树,倍增的思想

递归

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        if root==None:
            return True
        
        return self.helper(root.left,root.right)

    def helper(self,Nleft,Nright)->bool:

        if(Nleft==None and Nright==None):
            return True
        if((Nleft==None) ^ (Nright==None)) or (Nleft.val != Nright.val):
            return False

        return self.helper(Nleft.left,Nright.right) and self.helper(Nleft.right,Nright.left)

非递归,双进双出

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        if root==None:
            return True
        queue = [(root.left, root.right)]
        while(queue):
            (left,right) = queue.pop(0)
            if(left==None and right==None): #对称
                continue
            if((left==None)^(right==None) or (left.val != right.val)): #不对称
                return False
            queue.append((left.left,right.right))
            queue.append((left.right,right.left))
        
        return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值