用了两种方法解题: 先说第一种,用中序遍历的方法遍历一遍,然后将结果翻转看是否不变,如果是则是对称,否则不对称,但是这种方法存在一些情况会错误,因此需要加一些特殊情况的判断。 第二种方法,传两棵树进去,这两颗树是树A和树A对称翻转后的树B,因此只需要判断下树A和树B是否一致就可以了。但是我们直接翻转一下树很麻烦,因此其实可以传两颗树A进去,然后用树A的左子树和树B的右子树去比,树A的右子树和树B的左子树去比即可。

import copy
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pRoot TreeNode类 
# @return bool布尔型
#
class Solution:
    def isSymmetrical1(self , pRoot: TreeNode) -> bool:
        # write code here
        # 得到中序遍历结果,看是否正反一致
        self.res = []
        self.midtra(pRoot)
        tmp = copy.deepcopy(self.res)
        tmp.reverse()
        if len(self.res)>=3:
            if pRoot.left.val != pRoot.right.val:
                return False
        if self.res == tmp:
            return True
        else:
            return False

    def midtra(self , root):
        if root:
            self.midtra(root.left)
            self.res.append(root.val)
            self.midtra(root.right)

    def isSymmetrical(self , pRoot: TreeNode) -> bool:
        self.tag = 0
        self.check(pRoot , pRoot)
        if self.tag == 1:
            return False
        else:
            return True

    def check(self , root1 , root2):
        # 分别传入左右子树
        if (root1==None and root2!=None) or (root2==None and root1!=None):
            self.tag=1
            return 
        elif (root1==None and root2==None):
            return 
        elif root1.val != root2.val:
            self.tag=1
            return 
        else:
            self.check(root1.left , root2.right)
            self.check(root1.right , root2.left)




root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
print(Solution().isSymmetrical(root))