题目描述:
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
我的思路:
用栈保存根节点左右孩子,弹出,分别检查左孩子的左孩子和右孩子的右孩子,左孩子的右孩子和右孩子的左孩子,并依次进栈。出现不相同返回False,最后栈空返回True。
或者递归进行上面的检查。
我的代码:
class Solution:
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root is None:
return True
else:
return self.isSame(root.left, root.right)
def isSame(self, left, right):
if left is None and right is None:
return True
if left is None or right is None:
return False
if left.val == right.val:
outPair = self.isSame(left.left, right.right)
inPair = self.isSame(left.right, right.left)
return outPair and inPair
else:
return False
Disscus:
非递归方式:
class Solution:
def isSymmetric(self, root):
if not root: return True
stack = [(root.left, root.right)]
while stack:
cur = stack.pop()
l, r = cur[0], cur[1]
if not l and not r: continue
if not l and r or not r and l or l.val != r.val: return False
stack.append((l.right, r.left))
stack.append((l.left, r.right))
return True