思想:
- 若此树就一个节点或者没有节点,则为对称。
- 若此树不值一个节点,则分别比较其左节点和右节点的值。
- 然后在比较左节点和右节点的比较中,在分别比较,左节点的左子树跟右节点的右子树,左节点的右子树,跟右节点的左子树是否对称相等。
- 同时注意,左节点为空和左节点不为空右节点不为空场景。
type Tree struct {
Data interface{}
Left *Tree
Right *Tree
}
/*判断二叉树是否镜像对称,编程实现*/
func MirrorTree(tree Tree) bool {
if tree.Data == nil {
return true
}
return MirrorTreeCore(tree.Left, tree.Right)
}
func MirrorTreeCore(left, right *Tree) bool {
if left == nil {
return right == nil
}
if right == nil {
return false
}
if left.Data != right.Data {
return false
}
return MirrorTreeCore(left.Left, right.Right) && MirrorTreeCore(left.Right, right.Left)
}