Easy to understand Python
Recursive\n\n# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, x):\n#         self.val = x\n#         self.left = None\n#       
Recursive\n```\n# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, x):\n#         self.val = x\n#         self.left = None\n#         self.right = None\n\nclass Solution:\n    def isSymmetric(self, root: TreeNode) -> bool:\n        if not root:\n            return True\n        return self.check(root.left, root.right)\n        \n    def check(self, left, right):\n        if left is None and right is None:\n            return True\n        if left is None or right is None:\n            return False\n        if left.val != right.val:\n            return False\n        a = self.check(left.left, right.right)\n        b = self.check(left.right, right.left)\n        return a and b\n```\nIterative\n```\n# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, x):\n#         self.val = x\n#         self.left = None\n#         self.right = None\n\nclass Solution:\n    def isSymmetric(self, root: TreeNode) -> bool:\n        if not root:\n            return True\n        stack = collections.deque([(root.left, root.right)])\n        while stack:\n            l, r = stack.pop()\n            if l is None and r is None:\n                continue\n            if l is None or r is None:\n                return False\n            if l.val != r.val:\n                return False\n            stack.append((l.left, r.right))\n            stack.append((l.right, r.left))\n        return True\n```
['Stack', 'Depth-First Search', 'Recursion', 'Iterator', 'Python']