平衡二叉树

15 阅读1分钟

思路:

递归,判断树是否平衡二叉树即左子树、右子树都是平衡二叉树

夭折

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
}