如何使用递归对三个值求和 - Javascript

时间:2018-03-31 18:59:49

标签: javascript recursion

编写一个函数,返回所有节点的总和,包括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

如何在不传递新参数的情况下返回这些数字的总和?

2 个答案:

答案 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;
 }