树的遍历 | 对称二叉树

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
Note:
Bonus points if you could solve it both recursively and iteratively.

思路1: 递归

如果两个树p,q是对称的,那么p的左子树和q的右子树是对称的,p的右子树和左子树是对称的,

class Solution(object):
    def isSymmetric(self, root):
        return self.Mirror(root,root)
    def Mirror(self,p,q):
        if p is None and q is None:
            return True
        elif p is not None and q is not None:
            return p.val == q.val and self.Mirror(p.left,q.right) and self.Mirror(p.right,q.left)
        else:
            return False

思路2: 遍历

如果两个树p,q是对称的,那么在遍历的过程中,分别按照左孩子优先和右孩子优先遍历的顺序进行遍历,得到最终的结果是一样的。

posted @ 2019-02-14 22:22  罗梁  阅读(220)  评论(0编辑  收藏  举报