题目
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路
- 递归+对称
以先序遍历二叉树(中->左->右),因为二叉树的对称性, 所以如果按照中->右->左遍历,那么两次遍历的结果应该是相同的。需要注意的是,如果二叉树各个结点值相同,那么上述结论将无法判断该二叉树是否是对称二叉树,因此我们需要在遍历到叶子结点的左右节点时,返回None,那么我们就可以确定每个叶子结点的位置。
图片转自Jack Cui
代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetrical(self, pRoot):
# write code here
nodeList1,nodeList2 = [],[]
inOrder = self.inOrderRecur(pRoot,nodeList1)
symInOrder = self.inOrderSymmetricRecur(pRoot,nodeList2)
return inOrder == symInOrder