大风哥的打怪升级之路
学如逆水行舟,不进则退

第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)

 

posted on 2020-08-19 18:17  Little_Dandelion  阅读(49)  评论(0编辑  收藏  举报