题目
请实现一个函数,用来判断一棵二叉树是不是对称的。
如果一棵二叉树和它的镜像一样,那么它是对称的。
数据范围
树中节点数量 [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)
}