[英]Improve runtime of function calculating maximum sum of node values in a binary tree
想法是找到值最大的路径(该路径上节点的值之和)。 编辑:节点是完全无序的,这意味着您必须搜索整个路径,以了解一个路径是否会比另一个路径具有更大的价值。
这是树的节点构造函数:
var Node = function(val) {
this.val = val;
this.left = null;
this.right = null;
}
这是计算路径最大值的函数:
function maxPath(top) {
if (top.right === null || top.left === null) return top.val;
return Math.max(top.val, Math.max(top.val + maxPath(top.left), top.val + maxPath(top.right)));
}
该函数效率很低,并且只会为大约25层深度的树返回相当快的响应(在一秒钟之内)。 我正在尝试为一棵深100层的树找到最大求和路径,但似乎找不到我的方法。 有没有办法改善运行时间?
错误的答案,因为我不完全理解问题
如果树的数据是静态的,则可以存储从根到顶点的预先计算的和。
下次尝试
尝试删除递归。
但是我认为它不会更快,因为V8已经优化了您的代码。
function getMaxPath (topNode) {
var node = topNode;
var sum = node.val;
while (node.right) { // binary tree, right? So rigth and left exists together.
node = (node.right.val >= node.left.val) ? node.right : node.left;
sum = node.val;
}
return sum;
}
下一个!
var sums = []; // array of sum for each leaf
topNode.sum = topNode.val;
function fall(node) {
if (!node.right)
return sums.push(node.sum);
node.right.sum = node.sum + node.right.val;
fall(node.right);
node.left.sum = node.sum + node.left.val;
fall(node.left);
}
fall(topNode);
console.log(Math.max.apply(Math, sums)); // find max
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.