题目
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as:
a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
思路
- 一棵树是否平衡,等于左右子树的高度是否相差不大于1;
- 如果存在子树不平衡,那么这棵树也不平衡;
看了几个解题的代码,都是使用了两层递归,一层递归拿子树的高度,然后判断步骤1,外层递归循环进行上述操作,这个问题可以用一层递归即可解决问题。
var isBalanced = function(root) {
return (run(root) !== false)
};
var run = function(node) {
if (!node) return 0;
var leftHeight = run(node.left);
var rightHeight = run (node.right);
if (leftHeight === false || rightHeight === false || Math.abs(leftHeight - rightHeight) > 1) {
return false;
}
return Math.max(leftHeight, rightHeight) + 1;
}