剑指 Offer 28. 对称的二叉树

2022-07-02  本文已影响0人  Sun东辉

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

        1
   / \\
  2   2
 / \\ / \\
3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

        1
   / \\
  2   2
   \\   \\
   3    3

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

限制:

解题思路:递归

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isSymmetric(root *TreeNode) bool {
    if root == nil {
        return true
    }
    return checkSymmetric(root.Left, root.Right)
}

func checkSymmetric(p, q *TreeNode) bool {
    if p == nil && q == nil {
        return true
    }
    if p == nil || q == nil {
        return false
    }
    return p.Val == q.Val && checkSymmetric(p.Left, q.Right) && checkSymmetric(p.Right, q.Left)
}

时间复杂度:O(N),其中 N 为节点的个数。

空间复杂度:O(N),这里需要用一个队列来维护节点,每个节点最多进队一次,出队一次,队列中最多不会超过 N 个点,故渐进空间复杂度为 O(N)。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/dui-cheng-de-er-cha-shu-lcof/ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读