Skip to content

[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
}
本站访客数 人次 本站总访问量