一、问题描述:
链接:https://leetcode-cn.com/problems/symmetric-tree/comments/
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
二、解决方案:
#方法一:递归。三个关键点:循环主体、结束条件、返回值
#
# 递归循环主体:
# 判断是否:左子树的左孩子和右子树的右孩子对称 且 左子树的右孩子和右子树的左孩子对称
#
# 递归结束条件:
# 1. 左子树节点值 != 右子树节点值;
# 2. 其中一个子树为空(左子树为空 或 右子树为空);
# 3. 两个子树都为空(左子树和右子树都为空);
# 4. 两个子树都不为空,且节点值相等。
#
# 返回值:
# 1.2 返回 False,3 返回 True,4 进入递归循环主体。
#
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val # 节点值用 .val
# self.left = left # 左子树用 .left
# self.right = right # 右子树用 .right
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
return self.recursion_method(root.left, root.right)
def recursion_method(self, node1, node2):
if (not node1) and (not node2):
return True
elif (not node1) or (not node2):
return False
if node1.val != node2.val:
return False
else:
return self.recursion_method(node1.left, node2.right) and self.recursion_method(node1.right, node2.left)
三、知识点:
1. 一个 class 类里面,不同函数要用 .self 调用,否则会报错!如下图: