剑指Offer-对称的二叉树

60 阅读1分钟

题目

请实现一个函数,用来判断一棵二叉树是不是对称的。

如果一棵二叉树和它的镜像一样,那么它是对称的。

数据范围

树中节点数量 [0,100][0,100]。

样例

如下图所示二叉树[1,2,2,3,4,4,3,null,null,null,null,null,null,null,null]为对称二叉树:
    1
   / \
  2   2
 / \ / \
3  4 4  3

如下图所示二叉树[1,2,2,null,4,4,3,null,null,null,null,null,null]不是对称二叉树:
    1
   / \
  2   2
   \ / \
   4 4  3

解析

首先判断做左儿子和右儿子,若有一个为空或两值不同就返回false;然后递归判断左儿子的右儿子及右儿子的左儿子。

代码

GO

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