递归解法:
我的解法是层序遍历然后每层取eq(line,line[::-1]):
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
import operator
result = []
self.levelExpler(root, result, 1)
for line in result:
if not operator.eq(line, line[::-1]):
return False
return True
def levelExpler(self, root, result, level):
if root is None:
if len(result) < level:
result.append([root])
else:
result[level - 1].append(root)
return
if len(result) < level:
result.append([root.val])
else:
result[level - 1].append(root.val)
self.levelExpler(root.left, result, level + 1)
self.levelExpler(root.right, result, level + 1)
大佬解法:这种解法利用了1生2,2生4,。。。这种方法,符合了二叉树的每层大小,利用left.left and right.right和left.right and right.left这种递归方法。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return True
def mirror(left_node, right_node):
if not (left_node or right_node): #当左右节点都为空时
return True
elif not (left_node and right_node):
return False
if left_node and right_node:
if left_node.val == right_node.val:
return mirror(left_node.left, right_node.right) and mirror(left_node.right, right_node.left)
else:
return False
return mirror(root.left, root.right)
迭代解法:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if root is None: return True
isSym = True
L = [root]
R = [root]
while isSym and len(L) and len(R):
l, r = L.pop(), R.pop()
if l is None and r is None:
isSym = True
elif l is None or r is None:
isSym = False
elif l.val == r.val:
L.append(l.left)
R.append(r.right)
L.append(l.right)
R.append(r.left)
else:
isSym = False
return isSym