101.对称二叉树

75 阅读1分钟

题目:
给你一个二叉树的根节点 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 image.png

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)
}