LeetCode题解——Sum Root to Leaf Numbers

原创 2015年11月17日 21:54:36

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.

An example is the root-to-leaf path 1->2->3 which represents the number 123.

Find the total sum of all root-to-leaf numbers.

For example,

    1
   / \
  2   3

The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.

Return the sum = 12 + 13 = 25.

思路:

对于每一个节点,从该节点到叶结点的path可能有多条,如果我们已经计算得到了该节点左子结点到叶结点的 root-to-leaf path sum,记为 sumleft ,以及该节点右子节点到叶结点的root-to-leaf path sum,记为 sumright , 那么我们怎样通过已知的这两个信息得到当前节点到叶结点的sum,是否还需要额外的信息呢?

答案是需要,首先我们需要知道当前节点(eg. p)到每个叶子节点的长度,这样我们知道当前节点p在这条路径上贡献的值应该为

 SUM(p->val*pow(10,di) ; di为每个叶子节点i到当前节点p的长度,这样当前节点p到叶结点的值就可以求出来了:

 sump = SUM(p->val*pow(10,di) + sumleft + sumright 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int sumNumbers(TreeNode* root) {
        vector<int> d;
        return sumNumbers(root,d);
    }
    int sumNumbers(TreeNode* root, vector<int> & d){
        if(!root){
            d.push_back(0);
            return 0;
        }
        vector<int> d1,d2;
        int s = 0;
        if(!root->left && !root->right)  {d.push_back(0);return root->val;}
        if(root->left)  s += sumNumbers(root->left,d1);
        if(root->right) s += sumNumbers(root->right,d2);
        for(auto j:d1){
            d.push_back(j+1);
        }
        for(auto j:d2){
            d.push_back(j+1);
        }
        for(auto i:d){
            s+=root->val*pow(10,i);
        }
        return s;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

leetcode Sum Root to Leaf Numbers 详细思考分析过程

做这道题的时候,我自己遇到的问题: 1. 如何分情况? 2. 如何递归到该点的时候该如何操作? 3. 由跟节点到叶子节点的时候,每进入一层就需要把前面的值*10,如何处理这个值?总值又是如何保存的...
  • kenden23
  • kenden23
  • 2013年11月03日 09:15
  • 8838

Sum Root to Leaf Numbers -- LeetCode

原题链接: http://oj.leetcode.com/problems/sum-root-to-leaf-numbers/  这是一道树的题目,一般使用递归来做,主要就是考虑递归条件和结束条件。...
  • linhuanmars
  • linhuanmars
  • 2014年04月04日 09:20
  • 8736

LeetCode(129)SumRoottoLeafNumbers

题目如下: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent ...
  • feliciafay
  • feliciafay
  • 2014年02月28日 15:57
  • 1289

【LeetCode】Sum Root to Leaf Numbers 解题报告

【题目】 Given a binary tree containing digits from 0-9 only, each root-to-leaf path could repres...
  • ljiabin
  • ljiabin
  • 2014年09月22日 17:14
  • 2896

【LeetCode-面试算法经典-Java实现】【129-Sum Root to Leaf Numbers(所有根到叶子结点组组成的数字相加)】

【129-Sum Root to Leaf Numbers(所有根到叶子结点组组成的数字相加)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月15日 06:11
  • 1845

LeetCode 129 Sum Root to Leaf Numbers(递归求和)

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a numb...
  • qq_26658823
  • qq_26658823
  • 2017年07月12日 20:04
  • 682

LeetCode OJ 之Sum Root to Leaf Numbers (根到叶上数字的和)

题目: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent...
  • u012243115
  • u012243115
  • 2014年12月14日 10:21
  • 340

LeetCode 129. Sum Root to Leaf Numbers 题解

129. Sum Root to Leaf Numbers   Question Editorial Solution  My Submissions T...
  • daqiang95
  • daqiang95
  • 2016年10月11日 20:30
  • 108

LeetCode题解:Sum Root to Leaf Numbers

Sum Root to Leaf Numbers Given a binary tree containing digits from 0-9 only, each root-to-leaf p...
  • MagiSu
  • MagiSu
  • 2013年10月22日 11:04
  • 607

[Leetcode]Sum Root to Leaf Numbers

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a numb...
  • NoooName
  • NoooName
  • 2015年01月17日 22:29
  • 190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode题解——Sum Root to Leaf Numbers
举报原因:
原因补充:

(最多只允许输入30个字)