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

标签 javascript recursion

写一个函数,返回所有节点的总和,包括根节点

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

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

最佳答案

将左右节点值与当前值相加并返回:

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));

关于javascript - 如何使用递归对三个值求和 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49591327/

相关文章:

javascript - 如果第一个下拉菜单用户只选择喜欢的颜色蓝色或红色,我将如何选择宠物类型?

xcode - NSOpenPanel在选择文件时崩溃

java - 递归将同心圆压缩 10%,同时保持相对于中心的位置

java - 在 C++ 中,我们有引用。但在 Java 中,我们如何最好地使用按值复制 "translate"相同的代码?

javascript - 如何在 IE 中动态生成的挖空模板中自动聚焦到输入元素

javascript - 内容 JavaScript 未在内容脚本中执行

recursion - SICP 练习 1.16 ... "invariant quantity"提示是什么意思?

parsing - 递归解析语法消耗输入并且无法解析序列

javascript - Angular 2 选择选项(下拉)-如何获取更改值以便在函数中使用它?

javascript - 将 $.post 转换为 $.ajax