方法一:递归
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def recur(self, L, R):
if (not L) and (not R):
return True
if (not L) or (not R) or L.val != R.val:
return False
return self.recur(L.left, R.right) and self.recur(L.right, R.left)
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root:
return True
return self.recur(root.left, root.right)
方法二:迭代(队列)
【引用学习大佬解法,动画解释请移步大佬题解】,本文仅take notes
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isSymmetric(self, root):
if not root :
return True
if (not(root.left) and root.right) or (not(root.right) and root.left):
return False
que = [root.left, root.right]
while que:
L = que.pop(0)
R = que.pop(0)
if (not L) and (not R):
continue
if (not L) or (not R) or L.val != R.val:
return False
que.append(L.left)
que.append(R.right)
que.append(L.right)
que.append(R.left)
return True