leetcode101. 对称二叉树python

题目描述:

错误解法:

最初的想法是对树进行中序遍历,判断得到的结果对应位置是否相同判断是否为镜像对称。

比如例子中的第一个树,中序遍历结果为[3,2,4,1,4,2,3],结果除了中间的1之外全部对称,则该树镜像对称。例子中的第二个树,中序遍历结果为[2,3,1,2,3]结果不对称,则该树不是镜像对称。

提交之后发现对某些特殊样例无法正确判断,比如测试样例[1,2,2,2,null,2],中序遍历结果为[2,2,1,2,2],结果完全对称,但其实该树不满足镜像对称条件。

class Solution(object):
    def isSymmetric(self, root):
        result = self.midorder(root)
        print(result)
        length = len(result)
        ll = int(len(result)/2)
        for i in range(ll):
            if result[i]!=result[length-i-1]:
                return False
        return True

    def midorder(self,root):
        res = []
        if root==None:
            return res
        if root.left!=None:
            res = res + self.midorder(root.left)
        res.append(root.val)
        if root.right!=None:
            res = res + self.midorder(root.right)
        return res

正确解法:递归

如果一个树镜像对称:

根结点为空,返回True

判断root.left和root.right的节点值是否相同。

判断root.left的左子树和root.right的右子树是否相同。

判断root.left的右子树和root.right的左子树是否相同。

如果root则其左右子树应该完全对称,定义一个函数issame,

1.定义一个判断

class Solution(object):
    def isSymmetric(self, root):
        if root==None:
            return True
        return self.issame(root.left,root.right)
    def issame(self,left, right):
        if left == None and right == None:
            return True
        if left == None or right == None:
            return False
        if left.val != right.val:
            return False
        return self.issame(left.left, right.right) and self.issame(left.right, right.left)

另解:

树的前序遍历和后序遍历结果互逆是对称二叉树的性质,可以利用该性质完成判断。

 参考:***【LeetCode 101】对称二叉树(Python)_Lucy_R的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值