难度: Easy
请设计一个函数判断一棵二叉树是否 轴对称 。
示例 1:
输入:root = [6,7,7,8,9,9,8] 输出:true 解释:从图中可看出树是轴对称的。
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false 解释:从图中可看出最后一层的节点不对称。
提示:
0 <= 节点个数 <= 1000
注意:本题与主站 101 题相同:https://leetcode-cn.com/problems/symmetric-tree/
难度: Easy
请设计一个函数判断一棵二叉树是否 轴对称 。
示例 1:
输入:root = [6,7,7,8,9,9,8] 输出:true 解释:从图中可看出树是轴对称的。
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false 解释:从图中可看出最后一层的节点不对称。
提示:
0 <= 节点个数 <= 1000
注意:本题与主站 101 题相同:https://leetcode-cn.com/problems/symmetric-tree/
运行时间: 40 ms
内存: 15.1 MB
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isSymmetric(self, root: TreeNode) -> bool: def recur(l, r): if l is None and r is None: return True if l is None or r is None: return False return l.val == r.val and recur(l.left, r.right) and recur(l.right, r.left) return root is None or (recur(root.left, root.right))
该题解采用递归的方法判断二叉树是否轴对称。首先,如果树为空,则认为它是对称的。对于非空树,判断其左右子树是否对称。定义一个递归函数 recur(l, r),其中 l 和 r 分别代表两个待比较的节点。该函数的逻辑如下:如果 l 和 r 都为空,则返回 True;如果其中一个为空而另一个不为空,则返回 False;否则,比较 l 和 r 的值是否相等,且递归地比较 l 的左子树和 r 的右子树是否对称,以及 l 的右子树和 r 的左子树是否对称。
时间复杂度: O(n)
空间复杂度: O(n)
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isSymmetric(self, root: TreeNode) -> bool: def recur(l, r): if l is None and r is None: return True if l is None or r is None: return False return l.val == r.val and recur(l.left, r.right) and recur(l.right, r.left) return root is None or (recur(root.left, root.right))
在判断对称二叉树的递归过程中,节点值的相等是对称性要求的基础。如果两个对应位置的节点值不等,则已经违反了对称性原则,因此无需再考虑其子节点。对称性的检查是从顶部到底部进行的,一旦在任何级别发现不对称,整个树都不对称。
空树认为是对称的这一假设主要是基于对称性定义——空树没有元素可比较,自然符合对称的要求。这种假设不适用于所有二叉树相关的问题,例如在其他类型的问题中,空树可能需要特殊处理或有其他含义。所以,这是对称性问题特有的处理方式。
递归函数recur(l, r)的停止条件有两种:第一种是当比较的两个节点l和r都为空时,返回True,表示这部分子树是对称的;第二种是当其中一个节点为空而另一个不为空,或节点值不相等时,返回False,表示找到不对称的证据,递归终止。这些条件确保了只有当所有对应位置的节点都符合对称要求时,整棵树才是对称的。
这种处理方式是基于对称二叉树的定义:树的左子树是右子树的镜像。因此,在递归函数中,左节点的左子树应与右节点的右子树相对称,左节点的右子树应与右节点的左子树相对称。这是根据对称性的定义和镜像反射的原则来决定的,确保了每一层的节点都按照对称规则进行比较。