function IsBalanced_Solution(pRoot) {
return _ibs(pRoot, { val: 0 });
}
function _ibs(pRoot, depth) {
if(pRoot === null || pRoot === undefined) {
return true;
}
if(pRoot.left === undefined || pRoot.right === undefined) {
return true;
}
let l_depth = { val: 0 };
let r_depth = { val: 0 };
let l_res = false;
let r_res = false;
if(pRoot.left === null) {
l_depth.val = 0;
l_res = true;
} else
l_res = _ibs(pRoot.left, l_depth);
if(pRoot.right === null) {
r_depth.val = 0;
r_res = true;
} else
r_res = _ibs(pRoot.right, r_depth);
if( l_res && r_res ) {
let pf = Math.abs(l_depth.val - r_depth.val);
if(pf < 2) {
depth.val = 1 + Math.max(l_depth.val, r_depth.val);
return true;
}
}
return false;
}
function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
}
function printTree(root, depth=0) {
if(root === null || root === undefined) {
return;
}
if(root.left === undefined || root.right === undefined) {
console.log('NOT TreeNode');
return;
}
let indent = '';
for(let i=0; i<depth; i++) {
indent += '--';
}
console.log(indent+' ['+root.val+']');
printTree(root.left, depth+1);
printTree(root.right, depth+1);
}
function buildTree() {
let r_8 = new TreeNode('8');
let r_6 = new TreeNode('6');
let r_10 = new TreeNode('10');
let r_5 = new TreeNode('5');
let r_7 = new TreeNode('7');
let r_9 = new TreeNode('9');
let r_11 = new TreeNode('11');
r_10.right = r_11;
r_10.left = r_9;
r_6.right = r_7;
r_6.left = r_5
r_8.right = r_10;
r_8.left = r_6;
return r_8;
}
let pRoot = {};
printTree(pRoot);
console.time('1');
let res = IsBalanced_Solution(pRoot);
console.timeEnd('1');
console.log('res:', res);