编写一个函数,返回所有节点的总和,包括root
var nodes = {
value: 7,
left: { value: 1, left: null, right: null },
right: { value: 4, left: null, right: null }
};
考虑到这一点,结果应该等于12。
sumTheTreeValues = root => {
console.log(root.value);
if (root.left != null) {
sumTheTreeValues(root.left);
}
if (root.right != null) {
sumTheTreeValues(root.right);
}
};
如果此代码将记录
7
1
4
如何在不传递新参数的情况下返回这些数字的总和?
答案 0 :(得分:2)
将左右节点值添加到当前值并返回:
var nodes = {
value: 7,
left: { value: 1, left: null, right: null },
right: { value: 4, left: null, right: null }
};
sumTheTreeValues = root => {
let value = root.value;
if (root.left != null) {
value += sumTheTreeValues(root.left);
}
if (root.right != null) {
value += sumTheTreeValues(root.right);
}
return value;
};
console.log(sumTheTreeValues(nodes));
您还可以将其缩短一点,因为null
在添加到数字时会自动转换为0:
var nodes = {
value: 7,
left: { value: 1, left: null, right: null },
right: { value: 4, left: null, right: null }
};
sumTheTreeValues = root => root.value +
(root.left && sumTheTreeValues(root.left)) +
(root.right && sumTheTreeValues(root.right));
console.log(sumTheTreeValues(nodes));
答案 1 :(得分:-1)
另一种方法是将你的函数包装在另一个函数中:
function sum(root) {
var result = 0;
var sumTheTreeValues = root => {
result += root.value
if (root.left != null) {
sumTheTreeValues(root.left);
}
if (root.right != null) {
sumTheTreeValues(root.right);
}
};
sumTheValues(root)
return result;
}