leecode 101. Symmetric Tree对称树
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
# 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:
def iss(l,r):
if not l and not r:return True
if l and r and l.val==r.val:
return iss(l.left,r.right) and iss(l.right,r.left)
return False
return iss(root,root)
#迭代
class Solution:
def isSymmetric(self, root):
if not root:
return True
dq = collections.deque([(root.left,root.right),])
while dq:
node1, node2 = dq.popleft()
if not node1 and not node2:
continue
if not node1 or not node2:
return False
if node1.val != node2.val:
return False
# node1.left and node2.right are symmetric nodes in structure
# node1.right and node2.left are symmetric nodes in structure
dq.append((node1.left,node2.right))
dq.append((node1.right,node2.left))
return True