110.平衡二叉树
给定一个二叉树,判断它是否是 平衡二叉树
示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:true
示例 2: 输入:root = [1,2,2,3,3,null,null,4,4] 输出:false
示例 3: 输入:root = [] 输出:true
提示: 树中的节点数在范围 [0, 5000] 内 -10⁴ <= Node.val <= 10⁴
解题思路:
递归法:
- 首先,编写一个函数来计算树的高度。
- 然后,递归地检查每个节点是否平衡,即判断左右子树的高度差是否小于等于1,并且左右子树也都是平衡的。
- 最后,如果树是平衡的,则返回True,否则返回False。
func isBalanced(root *TreeNode) bool {
if root == nil {
return true
}
leftHeight := getHeight(root.Left)
rightHeight := getHeight(root.Right)
if math.Abs(float64(leftHeight-rightHeight)) > 1 {
return false
}
return isBalanced(root.Left) && isBalanced(root.Right)
}
func getHeight(node *TreeNode) int {
if node == nil {
return 0
}
leftHeight := getHeight(node.Left)
rightHeight := getHeight(node.Right)
return int(math.Max(float64(leftHeight), float64(rightHeight)))+1 节点自身高度
}