101. 对称二叉树

题目

  • 给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

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

示例 2:

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

题解一、分成左子树和右子树判断

  • 由于给的函数只能传一个参数,所以重新定义一个含两个参数的函数
class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        def compareTree(left,right):
        
            if left==None and right==None:#左子树和右子树都空
                return True
            elif (left == None and right != None) or (left != None and right == None):#左子树、右子树空一个
                return False
        
            elif left.val != right.val:#检查值
                return False
            return compareTree(left.left,right.right) and compareTree(left.right,right.left)#递归左、右子树

        if root is None:#空树
            return True
        return compareTree(root.left,root.right)#调用函数

题解二、前序遍历+递归

  • 不仅要判断节点带值的情况,还要考虑空节点位置是否相同
class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if root is None:
            return True
        if (root.left == None and root.right != None) or (root.left != None and root.right == None):
            return False
        
        if root.left != root.right:
            return False
        return isSymmetric(root.left.left,root.right.right) and isSymmetric(root.left.right,root.right.left)
posted @ 2023-11-04 15:12  Frommoon  阅读(2)  评论(0编辑  收藏  举报