Напишите функцию, которая возвращает сумму всех узлов, включая корень
var nodes = {
value: 7,
left: { value: 1, left: null, right: null },
right: { value: 4, left: null, right: null }
};
Учитывая это, результат должен быть равен 12.
sumTheTreeValues = root => {
console.info(root.value);
if (root.left != null) {
sumTheTreeValues(root.left);
}
if (root.right != null) {
sumTheTreeValues(root.right);
}
};
Если этот код войдет
7
1
4
Как вернуть сумму этих чисел, не передавая новый параметр?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Добавьте значение левого и правого узлов к текущему значению и верните:
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.info(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.info(sumTheTreeValues(nodes));Другой способ - обернуть вашу функцию внутри другой:
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;
}
Начните с попытки записать значение в
return, а не регистрировать его ...