给定一个二叉树,检查它是否是镜像对称的。
我们先思考下,树对称的条件是什么?
这样就形成了递归问题,对于两个子树,需要判断子树的子树是否对称。注意临界点:如果所给根节点,为空,那么是对称。
func isSymmetric(root *TreeNode) bool {
return isMirror(root, root)
}
func isMirror(t1 *TreeNode, t2 *TreeNode) bool {
if t1 == nil && t2 == nil {
return true
}
if t1 == nil || t2 == nil {
return false
}
return t1.Val == t2.Val && isMirror(t1.Left, t2.Right) && isMirror(t1.Right, t2.Left)
}
假设树上一共有 n 个节点。
时间复杂度:题目中我们遍历了这棵树,所以渐进时间复杂度为 O(n)。
空间复杂度:递归层数不超过 n,所以渐进空间复杂度为 O(n)。