101. 对称二叉树
原始题目链接:https://leetcode-cn.com/problems/symmetric-tree/
给定一个二叉树,检查它是否是镜像对称的。
**
解题思路:**
递归实现:递归的比较左子树.left 和右子树.right、左子树.right
和右子树.left是否相等,这样比较是根据题意要求的镜面对称。递归函数的结束条件:有两种情况1、左右子树的节点值不相等(有两种情况,左右子树都存在并且节点值不相等,左右子树有一个为空),不符合题意,返回False;2、左右子树都为空,就是遍历结束了,符合题意返回True。具体实现看代码及注释。
代码实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
# 递归解法
# 定义递归函数:参数是当前节点的左右子树,判断left.left和right.right、left.right和right.left是否相当,不相等直接返回False
# 递归函数的结束条件:有两种情况
# 1、左右子树的节点值不相等(有两种情况,左右子树都存在并且节点值不相等,左右子树有一个为空),不符合题意,返回False
# 2、左右子树都为空,就是遍历结束了,符合题意返回True
def dfs(self, left, right):
# 遍历结束,左右子树都为空
if left is None and right is None:
return True
# 有一个子树为空
if left is None or right is None:
return False
# 节点值不相等
if left.val != right.val:
return False
# 递归调用
return self.dfs(left.left, right.right) and self.dfs(left.right, right.left)
def isSymmetric(self, root: TreeNode) -> bool:
# 空树
if root is None:
return True
# 调用递归函数
return self.dfs(root.left, root.right)
参考文献:
https://leetcode-cn.com/problems/symmetric-tree/solution/dong-hua-yan-shi-101-dui-cheng-er-cha-shu-by-user7/