Simple Python solution with modified DFS. Please refer to the comments in the code.

```
def dfs2(p1,p2):
"""
Two pointers.
p1 searches using DFS, Left-Root-Right manner.
p2 searches using DFS, Right-Root-Left manner.
"""
# Base case if both nodes are leaves
if p1 == None and p2 == None:
return True
# Recurse if both of them are not null
if p1!=None and p2!=None:
# values for p1 and p2 must be same.
if p1.val != p2.val:
return False
x = dfs2(p1.left,p2.right)
y = dfs2(p1.right,p2.left)
# Left of p1 is not same as right of p2 then false.
# Simply perform "and" operation on x and y to enforce that.
return x and y
# If only one of them is null then return False.
return False
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root == None:
return True
else:
return dfs2(root.left,root.right)
```