Sum Root to Leaf Numbers

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

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.

有3个这个类型的题了,Path Sum ,Path Sum II还有这个

 

本来想直接传流的,但是流好像只能传递引用,所以最后还是传递了vector

C++代码实现:

#include<iostream>
#include<new>
#include<vector>
#include<sstream>
#include<cstdlib>
using namespace std;

//Definition for binary tree
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> vec;
        vector<int> tmp;
        int sum=0;
        hasPathSum(root,vec,tmp);
        for(auto a:vec)
           sum+=a;
        return sum;
    }
//path传入引用是因为,每一个对path的操作都要有影响,而tmp作为参数传入,是因为将上层的修改带入下层,但是下层对tmp的修改不会影响上层的操作
    void hasPathSum(TreeNode *root,vector<int> &path,vector<int> tmp)
    {
        if(root==NULL)
            return;
        tmp.push_back(root->val);
        if(root->left==NULL&&root->right==NULL)
        {
            stringstream ss;
            for(size_t i=0;i<tmp.size();i++)
                ss<<tmp[i];
            string s=ss.str();
            int c=atoi(s.c_str());
            path.push_back(c);
        }
        if(root->left)
            hasPathSum(root->left,path,tmp);
        if(root->right)
            hasPathSum(root->right,path,tmp);
    }
    void createTree(TreeNode *&root)
    {
        int i;
        cin>>i;
        if(i!=0)
        {
            root=new TreeNode(i);
            if(root==NULL)
                return;
            createTree(root->left);
            createTree(root->right);
        }
    }
};
int main()
{
    Solution s;
    TreeNode *root;
    s.createTree(root);
    int sum=s.sumNumbers(root);
    cout<<sum<<endl;
}

运行结果:

 

相关文章
List strem sum
List strem sum
44 0
LeetCode 222. Count Complete Tree Nodes
给出一个完全二叉树,求出该树的节点个数。
91 0
LeetCode 222. Count Complete Tree Nodes
|
Go
LeetCode 124. Binary Tree Maximum Path Sum
给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
70 0
LeetCode 124. Binary Tree Maximum Path Sum
LeetCode 404. Sum of Left Leaves
计算给定二叉树的所有左叶子之和。
84 0
LeetCode 404. Sum of Left Leaves
|
人工智能
Tree with Maximum Cost---CF1092F 树上DP
You are given a tree consisting exactly of n vertices. Tree is a connected undirected graph with n−1 edges. Each vertex v of this tree has a value av assigned to it. Let dist(x,y) be the distance between the vertices x and y.
142 0
Tree with Maximum Cost---CF1092F 树上DP
|
算法 机器学习/深度学习
|
关系型数据库 Oracle
[20170703]ora-00600[kkpamDGSPam2].txt
[20170703]ora-00600[kkpamDGSPam2].txt --//oracle 分区数量不能超过1048575.做一个例子说明: --//2^20-1=1048575 SCOTT@test01p> @ ver1 PORT_STRING   ...
1112 0