题目描述:
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
本文探讨了如何检查二叉树是否为自身镜像,即是否围绕其中心对称。提供了两种方法,一种是递归地比较左子树和右子树,另一种是非递归方法,使用栈来迭代检查节点对。
410

被折叠的 条评论
为什么被折叠?



