1. 题目
面试题 04.04. 检查平衡性
2. 思路
3. 代码实现
3.1 写法一
var isBalanced = function(root) {
return getH(root) >= 0
};
function getH(root) {
if (root === null) return 0
let leftH = getH(root.left),
rightH = getH(root.right)
if (leftH === -1 || rightH === -1 || Math.abs(leftH - rightH) > 1) return -1
else return Math.max(leftH, rightH) + 1
}
3.2 写法二(这个性能更好)
var isBalanced = function(root) {
if (root == null) return true
let flag = true
function dfs(root) {
if (root == null) return 0
let leftH = dfs(root.left),
rightH = dfs(root.right)
if (Math.abs(leftH - rightH) > 1) flag = false
return Math.max(leftH, rightH) + 1
}
dfs(root)
return flag
};
4. 参考
官方题解
检查平衡性 判断是否被破坏掉平衡…