题目:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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
}