题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路1:
递归,判断左子树和又子树是不是一样
代码1:
class Solution:
def isSymmetrical(self, pRoot):
# write code here
return self.isSame(pRoot, pRoot)
def isSame(self, p1, p2):
if not p1 and not p2:
return True
if not p1 or not p2:
return False
if p1.val != p2.val:
return False
return self.isSame(p1.right, p2.left) and self.isSame(p1.left, p2.right)
思路2:
层次遍历,每次比较当前层是不是回文结构
注意要添加None
代码2:
class Solution:
def isSymmetrical(self, pRoot):
# write code here
if not pRoot:
return True
s1 = [pRoot]
s2 = []
while s1:
cur = []
for node in s1:
if node:
s2.append(node.left)
s2.append(node.right)
cur.append(node.val)
else:
cur.append(None)
if cur != cur[::-1]:
return False
s1 = s2
s2 = []
return True