树-对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [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 compare(root.Left, root.Right)
}
func compare(a, b *TreeNode) bool {
if a == nil && b == nil {
return true
}
// 上面都为空返回,证明下有一个为空另一个肯定不为空,所以返回false
if a == nil || b == nil {
return false
}
if a.Val != b.Val {
return false
}
// 注意是对称树,所以看图说话
var res bool
res1 := compare(a.Left, b.Right)
res2 := compare(a.Right, b.Left)
res = res1 && res2
return res
}