树的算法大多都是递归的, 树本身就是一种非常递归的结构.
要判断是不是平衡二叉树, 题目也说了, 左右两个子树的高度差绝对值不超过1, 那我们非常朴素的, 每次都计算子树的最大高度,然后相减就看看符不符合标准就行了.
从结构上看好像是有两层递归在里面, em.. 估计特别容易爆栈
def isBalanced(root: TreeNode): Boolean = {
def deep(node: TreeNode, level: Int = 0): Int = {
if (node == null) level
else {
math.max(
deep(node.left, level + 1),
deep(node.right, level + 1))
}
}
if(root == null) true
else {
val leftDeep = deep(root.left)
val rightDeep = deep(root.right)
math.abs(leftDeep - rightDeep) <= 1 &&
isBalanced(root.left) &&
isBalanced(root.right)
}
}