思路:
递归,判断树是否平衡二叉树即左子树、右子树都是平衡二叉树
夭折
func isBalanced(root *TreeNode) bool {
//root=nil说明不了什么,一个单独的节点肯定是平衡二叉树啊
if isBalanced(root.Left) && isBalanced(root.Right){
return true
}
return false
}
递归的方式不对,应该以获取树的高度函数递归
树的高度返回值代表两种含义,可以提前阻断执行。
func isBalanced(root *TreeNode) bool {
return getHeight(root) != -1
}
// getHeight 返回以root为根的子树的高度,如果子树是平衡的。
// 如果不是平衡的,返回-1。
func getHeight(root *TreeNode) int {
if root == nil {
return 0
}
leftHeight := getHeight(root.Left)
if leftHeight == -1 {
return -1
}
rightHeight := getHeight(root.Right)
if rightHeight == -1 {
return -1
}
dec := abs(leftHeight, rightHeight)
if dec > 1 {
return -1
}
return max(leftHeight, rightHeight) + 1
}
func abs(a, b int) int {
if a-b > 0 {
return a - b
}
return b - a
}
func max(a, b int) int {
if a > b {
return a
}
return b
}