110.平衡二叉树

71 阅读1分钟

题目:
给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
算法:
高度平衡二叉树:【每个】节点的【最大深度】差不超过1

func isBalanced(root *TreeNode) bool {
	if root == nil {
		return true
	}
	ld, lb := getDepth(root.Left)
	rd, rb := getDepth(root.Right)
	fmt.Println(ld, rd)
	return lb && rb && abs(ld, rd) <= 1
}

func getDepth(root *TreeNode) (int, bool) {
	if root == nil {
		return 0, true
	}
	leftDepth, leftBalance := getDepth(root.Left)
	rightDepth, rightBalance := getDepth(root.Right)
	if leftDepth > rightDepth {
		return leftDepth + 1, leftBalance && rightBalance && abs(leftDepth, rightDepth) <= 1
	}
	return rightDepth + 1, leftBalance && rightBalance && abs(leftDepth, rightDepth) <= 1
}

func abs(a, b int) int {
	if a > b {
		return a - b
	}
	return b - a
}