题目链接
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
解题思路
1.递归遍历(在基础上做了更新)
2.如果当前根节点为 None,则直接返回 True。
3.如果当前根节点不为 None,则调用 check(left, right) 方法递归检查其左右子树是否对称。
- 如果左子树节点为 None,并且右子树节点也为 None,则直接返回 True。
- 如果左子树节点为 None,并且右子树节点不为 None,则直接返回 False。
- 如果左子树节点不为 None,并且右子树节点为 None,则直接返回 False。
- 如果左子树节点值不等于右子树节点值,则直接返回 False。
- 如果左子树节点不为 None,并且右子树节点不为 None,并且左子树节点值等于右子树节点值,则:
- 递归检测左右子树的外侧节点是否相等。
- 递归检测左右子树的内测节点是否相等。
- 如果左右子树的外侧节点、内测节点值相等,则返回 True。
解题代码
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
return self.dfs(root.left, root.right)
def dfs(self, node1, node2):
if not node1 and not node2:
return True
if not node1 or not node2:
return False
if node1.val != node2.val:
return False
return self.dfs(node1.left, node2.right) and self.dfs(node1.right, node2.left)