JSFiddle - React, Tailwind, and code Playground
by danbeam
JavaScript
function isBalanced(node) {
if (!node)
return true;
var left = count(node.left), right = count(node.right);
//console.log(left, right);
return Math.abs(left - right) < 2;
}
function count(node) {
if (!node)
return 0;
return 1 + count(node.left) + count(node.right);
}
function assert(cond) {
if (!cond)
throw 'fail';
console.log('ok');
}
// just a root
var root = {data: 5};
assert(isBalanced(root));
// left=1, right=0
root.left = {data: 3};
assert(isBalanced(root));
// left=1, right=1
root.right = {data: 7};
assert(isBalanced(root));
// left=2, right=1
root.left.left = {data: 1};
assert(isBalanced(root));
// left=3, right=1
root.left.right = {data: 4};
assert(!isBalanced(root));
// left=3, right=2
root.right.left = {data: 6};
assert(isBalanced(root));
// left=3, right=3
root.right.right = {data: 9};
assert(isBalanced(root));
// left=3, right=5
root.right.right.left = {data: 8};
root.right.right.right = {data: 10};
assert(!isBalanced(root));