Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

求根到叶子节点数字之和 #104

Open
louzhedong opened this issue Dec 11, 2018 · 0 comments
Open

求根到叶子节点数字之和 #104

louzhedong opened this issue Dec 11, 2018 · 0 comments

Comments

@louzhedong
Copy link
Owner

习题

出处 LeetCode 算法第129题

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。

例如,从根到叶子节点路径 1->2->3 代表数字 123

计算从根到叶子节点生成的所有数字之和。

说明: 叶子节点是指没有子节点的节点。

示例 1:

输入: [1,2,3]
    1
   / \
  2   3
输出: 25
解释:
从根到叶子节点路径 1->2 代表数字 12.
从根到叶子节点路径 1->3 代表数字 13.
因此,数字总和 = 12 + 13 = 25.

示例 2:

输入: [4,9,0,5,1]
    4
   / \
  9   0
 / \
5   1
输出: 1026
解释:
从根到叶子节点路径 4->9->5 代表数字 495.
从根到叶子节点路径 4->9->1 代表数字 491.
从根到叶子节点路径 4->0 代表数字 40.
因此,数字总和 = 495 + 491 + 40 = 1026.

思路

既然我们需要到达每一个叶节点,那么就可以采用DFS(深度递归遍历)的方式,创建一个数组来存放所有结果

解答

/**
 * @param {TreeNode} root
 * @return {number}
 */
function DFS(resArray, root, str) {
  if (root) {
    var current = str + root.val;
    if (!root.left && !root.right) {
      resArray.push(current);
    } else {
      DFS(resArray, root.left, current);
      DFS(resArray, root.right, current);
    }
  }

}
var sumNumbers = function (root) {
  var resArray = [];
  var str = '';
  DFS(resArray, root, str);
  var res = 0;
  for (var i = 0; i < resArray.length; i++) {
    res += Number(resArray[i]);
  }
  return res;
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant