https://leetcode.com/problems/balanced-binary-tree/
运用递归思路,将二叉树的深度和是否是平衡的一起判断,递归会从最底层的树开始计算是否是平衡的,然后将底层的深度往上传,从而避免了多次计算树的子树的深度。

func isBalanced(_ root: TreeNode?) -> Bool {
	func calDepth(_ node: TreeNode?) -> (Int, Bool) {
		guard let node = node else { return (0, true) }
		let l = calDepth(node.left)
		let r = calDepth(node.right)
		guard l.1 && r.1 else { return (0, false) }
		if l.0 - r.0 > 1 || l.0 - r.0 < -1 {
			return (0, false)
		} else {
			return (1 + max(l.0, r.0), true)
		}
	}
	return calDepth(root).1
}

D0F96CF7-E4C4-4C03-A0F9-C26A5B3B01A5