101. 对称二叉树
题目
- 给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
- 和100题一样,跳转链接:https://www.cnblogs.com/lushuang55/p/17879581.html
题解一、分成左子树和右子树判断
- 由于给的函数只能传一个参数,所以重新定义一个含两个参数的函数
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)