При использовании цикла for функция, которая считает сумму элементов дерева выдает некорректный результат.Сумма должна равняться 69,а не 54
const tree = [
{
v: 5,
c: [
{
v:10,
c: [
{
v:11,
}
]
},
{
v:7,
c: [
{
v:5,
c: [
{
v:1
}
]
}
]
}
]
},
{
v: 5,
c: [
{
v:10
},
{
v:15
}
]
}
]
function treeSum(tree) {
let sum = 0;
for (let i = 0; i < tree.length; i++) {
sum+= tree[i].v;
if (!tree[i].c) {
return tree[i].v;
}
sum += treeSum(tree[i].c)
}
/* tree.forEach((node,index)=>{
index;
sum += node.v
if (!node.c) {
return node.v;
}
sum += treeSum(node.c)
}) */
/* c foreach все работает*/
return sum
}
Ответы (1 шт):
Автор решения: Rudi
→ Ссылка
В методе forEach на каждой итерации вызывается колбек функция в которой считается сумма здесь if (!node.c) { return node.v; } если нет node.c тогда return прервёт выполнение и sum += treeSum(node.c) не выполнится, колбек будет применен к следующему элементу. В for return прервёт выполнение цикла. Там нужно перейти к следующему элементу до выполнения sum += treeSum(tree[i].c)..
const tree = [{
v: 5,
c: [{
v: 10,
c: [{
v: 11,
}]
},
{
v: 7,
c: [{
v: 5,
c: [{
v: 1
}]
}]
}
]
},
{
v: 5,
c: [{
v: 10
},
{
v: 15
}
]
}
]
function treeSum(tree) {
let sum = 0;
for (let i = 0; i < tree.length; i++) {
sum += tree[i].v;
if (!tree[i].c) continue;
sum += treeSum(tree[i].c)
}
/* tree.forEach((node,index)=>{
index;
sum += node.v
if (!node.c) {
return node.v;
}
sum += treeSum(node.c)
}) */
/* c foreach все работает*/
return sum
}
console.log(treeSum(tree))