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
Iteration and Recursion methods are used in this problem.
For each pair of nodes, not only the values should be equal but also one’s left node and another’s right node, and one’s right node and another’s left node should be the same.
- Recursion
class Solution:
def isSymmetrical(self, pRoot):
# write code here
def symme(node1, node2):
if not node1 or not node2:
if node1 is not None or node2 is not None:
return False
return True
if node1.val != node2.val:
return False
return symme(node1.right, node2.left) & symme(node1.left, node2.right)
if not pRoot:
return True
return symme(pRoot.left, pRoot.right)
- Iteration
class Solution:
def isSymmetrical(self, pRoot):
# write code here
if not pRoot:
return True
stack = [(pRoot.left, pRoot.right)]
while stack:
node1, node2 = stack.pop()
if not node1 or not node2:
if node1 or node2:
return False
continue
if node1.val != node2.val:
return False
stack.append((node1.left, node2.right))
stack.append((node1.right, node2.left))
return True