题目:对称二叉树
题目来源:Leetcode
对称树满足什么条件呢?
- 左右子树均为空
- 左右子树均不为空且左右子树根节点相等,且左子树的左树对称于右子树的右树and右子树的左数对称于左子树的右树
如何判断左子树的左右树和右子树的左右树?递归即可,代码如下:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
# 递归
def isSymmetric(self, root: TreeNode) -> bool:
def judge(left, right):
if not left and not right:
return True
elif not left or not right:
return False
else:
return left.val == right.val and judge(left.right, right.left) and judge(left.left, right.right)
return judge(root, root)
迭代版本,思路与递归类似,利用队列实现迭代:
def isSymmetric1(self, root: TreeNode) -> bool:
import collections
q = collections.deque()
q.append(root)
q.append(root)
while q:
l = q.popleft()
r = q.popleft()
if not l and not r:
continue
elif (not l or not r) or (l.val != r.val):
return False
else:
q.append(l.left)
q.append(r.right)
q.append(l.right)
q.append(r.left)
return True