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  节点自身高度
}