[LCR 176] 判断是否为平衡二叉树
go
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isBalanced(root *TreeNode) bool {
if root == nil {
return true
}
var dfs func(node *TreeNode) (int, bool)
dfs = func(node *TreeNode) (int, bool) {
if node == nil {
return 0, true
}
leftHeight, leftBalanced := dfs(node.Left)
rightHeight, rightBalanced := dfs(node.Right)
if !leftBalanced || !rightBalanced || abs(leftHeight-rightHeight) > 1 {
return 0, false
}
return max(leftHeight, rightHeight) + 1, true
}
_, ok := dfs(root)
return ok
}
func abs(a int) int {
if a < 0 {
return -a
}
return a
}
func max(a, b int) int {
if a > b {
return a
}
return b
}