第101题:对称二叉树
描述:定一个二叉树,检查它是否是镜像对称的。
示例:
二叉树 [1,2,2,3,4,4,3] 是对称的:
1
/ \
2 2
/ \ / \
3 4 4 3
解题思路:递归法
首先需要确定二叉树镜像对称的条件:左子树根节点值 = 右子树根节点值、左子树根节点的左子树与右子树根节点的右子树镜像对称、左子树根节点的右子树与右子树根节点的左子树镜像对称。
而且需要明确一点,如果一个二叉树是镜像对称的,那么它和它自己也是互为镜像对称的。
故若判断一个二叉树是否镜像对称,转换成判断该二叉树与它自己是否镜像对称:即两颗子树根节点是否相等、两颗子树的左子树与右子树是否镜像对称、两颗子树的右子树与左子树是否镜像对称。
Python代码:
1 # Definition for a binary tree node. 2 # class TreeNode(object): 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution(object): 9 def isSymmetric(self, root): 10 """ 11 :type root: TreeNode 12 :rtype: bool 13 """ 14 return self.checkout(root, root) 15 16 def checkout(self, q, p): 17 if q == None and p == None: 18 return True 19 elif q == None or p == None: 20 return False 21 else: 22 return q.val == p.val and self.checkout(p.left, q.right) and self.checkout(p.right, q.left)
书痴者文必工,技痴者艺必良