题目
从根节点出发,每个节点都有权值,求到所有叶子节点的路径中,累加和的最大的值
- 二叉树套路,子节点返回所需要的结果,对于该题是返回当前子节点的最大累加和,base case 是叶子节点最大和就是自身权值,中间过程是拿到子节点返回的最大和进行比较
function process(node) {
if (node.left === undefined && node.right === undefined) {
return node.value;
}
let leftMaxValue, rightMaxValue;
if (node.left !== undefined) {
leftMaxValue = process(node.left);
}
if (node.right !== undefined) {
rightMaxValue = process(node.right);
}
return node.value + Math.max(leftMaxValue, rightMaxValue);
}
解法二:从上往下,将之前的累加和传递,每到一个叶子节点时比较历史到达的累加和
let max = 0;
function process(node, preValue) {
if (node.left === undefined && node.right === undefined) {
return Math.max(max, node.value + preValue);
}
if (node.left !== undefined) {
process(node.left, preValue + node.value);
}
if (node.right !== undefined) {
process(node.right, preValue + node.value);
}
}