python实现对称二叉树的判断

python实现对称二叉树的判断

考虑问题

1. 什么是对称二叉树?

以根节点为对称轴,左子树与右子树对称

2. 对称二叉树的结点有什么特点?

右根左的顺序遍历左子树,以左根右的顺序遍历右子树,每次访问的结点值相等

3. 代码逻辑是什么?

3.1 首先我们判断左根结点的值是否等于右根结点的值,如果不等,可以直接返回false(递归的终止条件)。
3.2 如果左右根结点的值相等,从外侧到内侧的顺序判断左右子树的结点值是否相等。(如果左子树是左侧结点,那么右子树就是右侧结点)外侧和内侧需要用到两个递归
3.3 同3.1,如果不等直接返回。(还需要考虑结点值有非空或者空的情况)
3.4 直到左右子树的所有结点都被访问一遍。(递归从左右根节点进去 然后 出来

代码实现

class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        sign = True
        sign = self.sym(root.left, root.right, sign) # 判断左子树和右子树是否对称
        return sign
    def sym(self, root1, root2, sign):
        if sign: # 如果已经不对称了,就不需要再判断了
            if root1 != None and root2 != None:
                # 注意:这里必须是判断值是否相等,因为left和right不相等,所以不能直接判断结点是否相等。
                if root1.val == root2.val: 
                    # 判断外侧结点是否对称
                    sign = self.sym(root1.left, root2.right, sign) 
                    # 判断内侧结点是否对称
                    sign = self.sym(root1.right, root2.left, sign) 
                else:
                    sign = False # 左右子树的结点值不相等时
            elif root1 == None and root2 == None:
                pass # 左右结点为空时
            else:
                sign = False # 左右结点有一个不为空时
        return sign

注意

  1. 由于结点的left和right存储的值不同,因此不能通过判断结点判断对称,而应该是用结点值(val)。判断左右子树相等左右子树对称是不一样的。
  2. 节点为空的时候,是无法通过.val获得值的,所以需要单独考虑结点都为空时。而且对称二叉树的左右子树结点可以都为空,但不能一个为空,一个不为空。
  3. 当有一个结点值不相等时,就认为这个二叉树是不对称的,可以直接返回false
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值