При использовании цикла 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))

→ Ссылка