【算法训练】剑指offer#28 对称的二叉树

一、描述

剑指 Offer 28. 对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

fWt7FS.png

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

二、思路

  • 构造镜像树,然后对比
  • 别闹了。。。不显示,应该就在这棵树本身上对比,不构造镜像

三、解题

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def __init__(self):
        self.re = True
    def isSymmetric(self, root: TreeNode) -> TreeNode:
        if root:
            if root.right and root.left:
                if root.left.val != root.right.val:
                    return False
                else:
                    self.judge(root.left,root.right)
            else:
                if not(not root.left and not root.right):
                    # 只有一个存在
                    return False
                else:
                    return True
        return self.re

    def judge(self, left_node, right_node):
        # 先判断四个字节点是否存在
        if left_node.right and right_node.left and left_node.left and right_node.right:
            if left_node.left.val == right_node.right.val and left_node.right.val == right_node.left.val:
                self.judge(left_node.left,right_node.right)
                self.judge(left_node.right,right_node.left)
            else:
                self.re = False
                return
        else:
            # 存在节点缺失
            if left_node.left and right_node.right:
                if left_node.left.val == right_node.right.val:
                    self.judge(left_node.left,right_node.right)
                else:
                    self.re = False
                    return
            else:
                if not(not left_node.left and not right_node.right):
                    self.re = False
                    return
            if left_node.right and right_node.left:
                if left_node.right.val == right_node.left.val:
                    self.judge(left_node.right,right_node.left)
                else:
                    self.re = False
                    return
            else:
                if not(not left_node.right and not right_node.left):
                    self.re = False
                    return
posted @ 2022-01-18 19:24  小拳头呀  阅读(22)  评论(0编辑  收藏  举报