function getTreeDepth(tree) {
if (tree.length == 0 || tree.length == 1) {
return tree.length;
}
depth = 1;
increment = 1;
maxIndex = 1;
while(maxIndex < tree.length) {
increment ++;
maxIndex += increment;
depth ++;
}
return depth;
}
function maxSum(tree, treeDepth, rootIndex, rootDepth) {
if (rootDepth == treeDepth) {
return tree[rootIndex];
}
// Recursive step:
var leftSubTreeSum = maxSum(tree, treeDepth, rootIndex + rootDepth, rootDepth + 1);
var rightSubTreeSum = maxSum(tree, treeDepth, rootIndex + rootDepth + 1, rootDepth + 1);
var maxSubTreeSum;
if (rightSubTreeSum > leftSubTreeSum) {
maxSubTreeSum = rightSubTreeSum;
} else {
maxSubTreeSum = leftSubTreeSum;
}
return tree[rootIndex] + maxSubTreeSum;
}
//NOTE: children of tree[n] are tree[n + depthOfN] and tree[n + depthOfN + 1]
var tree = [75, 95, 64, 17, 47, 82, 18, 35, 87, 10, 20, 04, 82, 47, 65, 19, 01, 23, 75, 03, 34, 88, 02, 77, 73, 07, 63, 67, 99, 65, 04, 28, 06, 16, 70, 92, 41, 41, 26, 56, 83, 40, 80, 70, 33, 41, 48, 72, 33, 47, 32, 37, 16, 94, 29, 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14, 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57, 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48, 63, 66, 04, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31, 04, 62, 98, 27, 23, 09, 70, 98, 73, 93, 38, 53, 60, 04, 23];
var treeDepth = getTreeDepth(tree);
document.writeln("Max sum of traversal = " + maxSum(tree, treeDepth, 0, 1));
ZnVuY3Rpb24gZ2V0VHJlZURlcHRoKHRyZWUpIHsKCWlmICh0cmVlLmxlbmd0aCA9PSAwIHx8IHRyZWUubGVuZ3RoID09IDEpIHsKCQlyZXR1cm4gdHJlZS5sZW5ndGg7Cgl9CgkKCWRlcHRoID0gMTsKCWluY3JlbWVudCA9IDE7CgltYXhJbmRleCA9IDE7CgkKCXdoaWxlKG1heEluZGV4IDwgdHJlZS5sZW5ndGgpIHsKCQlpbmNyZW1lbnQgKys7CgkJbWF4SW5kZXggKz0gaW5jcmVtZW50OwoJCWRlcHRoICsrOwoJfQoJCglyZXR1cm4gZGVwdGg7Cn0KCmZ1bmN0aW9uIG1heFN1bSh0cmVlLCB0cmVlRGVwdGgsIHJvb3RJbmRleCwgcm9vdERlcHRoKSB7CglpZiAocm9vdERlcHRoID09IHRyZWVEZXB0aCkgewoJCXJldHVybiB0cmVlW3Jvb3RJbmRleF07Cgl9CgkKCS8vIFJlY3Vyc2l2ZSBzdGVwOgoJdmFyIGxlZnRTdWJUcmVlU3VtID0gbWF4U3VtKHRyZWUsIHRyZWVEZXB0aCwgcm9vdEluZGV4ICsgcm9vdERlcHRoLCByb290RGVwdGggKyAxKTsKCXZhciByaWdodFN1YlRyZWVTdW0gPSBtYXhTdW0odHJlZSwgdHJlZURlcHRoLCByb290SW5kZXggKyByb290RGVwdGggKyAxLCByb290RGVwdGggKyAxKTsKCXZhciBtYXhTdWJUcmVlU3VtOwoJCglpZiAocmlnaHRTdWJUcmVlU3VtID4gbGVmdFN1YlRyZWVTdW0pIHsKCQltYXhTdWJUcmVlU3VtID0gcmlnaHRTdWJUcmVlU3VtOwoJfSBlbHNlIHsKCQltYXhTdWJUcmVlU3VtID0gbGVmdFN1YlRyZWVTdW07Cgl9CgkKCXJldHVybiB0cmVlW3Jvb3RJbmRleF0gKyBtYXhTdWJUcmVlU3VtOwp9CgovL05PVEU6IGNoaWxkcmVuIG9mIHRyZWVbbl0gYXJlIHRyZWVbbiArIGRlcHRoT2ZOXSBhbmQgdHJlZVtuICsgZGVwdGhPZk4gKyAxXQp2YXIgdHJlZSA9IFs3NSwgOTUsIDY0LCAxNywgNDcsIDgyLCAxOCwgMzUsIDg3LCAxMCwgMjAsIDA0LCA4MiwgNDcsIDY1LCAxOSwgMDEsIDIzLCA3NSwgMDMsIDM0LCA4OCwgMDIsIDc3LCA3MywgMDcsIDYzLCA2NywgOTksIDY1LCAwNCwgMjgsIDA2LCAxNiwgNzAsIDkyLCA0MSwgNDEsIDI2LCA1NiwgODMsIDQwLCA4MCwgNzAsIDMzLCA0MSwgNDgsIDcyLCAzMywgNDcsIDMyLCAzNywgMTYsIDk0LCAyOSwgNTMsIDcxLCA0NCwgNjUsIDI1LCA0MywgOTEsIDUyLCA5NywgNTEsIDE0LCA3MCwgMTEsIDMzLCAyOCwgNzcsIDczLCAxNywgNzgsIDM5LCA2OCwgMTcsIDU3LCA5MSwgNzEsIDUyLCAzOCwgMTcsIDE0LCA5MSwgNDMsIDU4LCA1MCwgMjcsIDI5LCA0OCwgNjMsIDY2LCAwNCwgNjgsIDg5LCA1MywgNjcsIDMwLCA3MywgMTYsIDY5LCA4NywgNDAsIDMxLCAwNCwgNjIsIDk4LCAyNywgMjMsIDA5LCA3MCwgOTgsIDczLCA5MywgMzgsIDUzLCA2MCwgMDQsIDIzXTsKdmFyIHRyZWVEZXB0aCA9IGdldFRyZWVEZXB0aCh0cmVlKTsKZG9jdW1lbnQud3JpdGVsbigiTWF4IHN1bSBvZiB0cmF2ZXJzYWwgPSAiICsgbWF4U3VtKHRyZWUsIHRyZWVEZXB0aCwgMCwgMSkpOw==