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));