题目:
给你一个二叉树的根节点 root , 检查它是否轴对称。
算法:
方法一:
迭代
func isSymmetric(root *TreeNode) bool {
array := make([]*TreeNode, 0)
array = append(array, root)
for len(array) != 0 {
length := len(array)
left, right := 0, length-1
for left < right {
if array[left] == nil && array[right] == nil || array[left] != nil && array[right] != nil && array[left].Val == array[right].Val {
left++
right--
} else {
return false
}
}
for i := 0; i < length; i++ {
if array[i] != nil {
array = append(array, array[i].Left)
array = append(array, array[i].Right)
}
}
array = array[length:]
}
return true
}
方法二:
递归
当前的节点相等,并且子节点对称
两个指针,虚线左边的树为p,右边的数为q
func isSymmetric(root *TreeNode) bool {
return check(root, root)
}
func check(p, q *TreeNode) bool {
if p == nil && q == nil {
return true
}
if p == nil || q == nil {
return false
}
return p.Val == q.Val && check(p.Left, q.Right) && check(p.Right, q.Left)
}