您的位置:首页 > 其它

Sum Root to Leaf Numbers

2015-06-10 10:04 274 查看
1

class Solution {

public:

vector<vector<int>> result;

vector<int>path;

int i;

int sumNumbers(TreeNode* root) {

int sum=0;

path1(root);

if(root==NULL) return 0;

for(i=0;i<=result.size()-1;i++)

sum+=sum1(result[i]);

return sum;

}

void path1(TreeNode* root)

{

if(!root) return ;

path.push_back(root->val);

if(root->left==NULL&&root->right==NULL) result.push_back(path);

path1(root->left);

path1(root->right);

path.pop_back();

}

int sum1(vector<int> v)

{

int sum=0;

for(i=0;i<=v.size()-1;i++)

sum=10*sum+v[i];

return sum;

}

};

这种方法超时了。思路很简单,借鉴path sum的思路,碰到叶子节点就POP。 注意一个问题,以后写尽量写成i<v.size(), 不要写成i<=v.size()-1;

2

class Solution {

public:

int result=0;

vector<int>path;

int i;

int sumNumbers(TreeNode* root) {

int sum=0;

path1(root);

if(root==NULL) return 0;

return result;

}

void path1(TreeNode* root)

{

int sum=0;

if(!root) return ;

path.push_back(root->val);

if(root->left==NULL&&root->right==NULL)

{

for(vector<int>::iterator it=path.begin();it!=path.end();it++)

{

sum=sum*10+*it;

}

result+=sum;

}

path1(root->left);

path1(root->right);

path.pop_back();

}

};

把容器去掉就可以了。直接计算快多了。就能AC .

3

class Solution {

public:

int sum=0;

int sumNumbers(TreeNode* root) {

return sum1(root,0);

}

int sum1(TreeNode* root,int sum)

{

if(!root) return 0;

if(root->left==NULL&&root->right==NULL)

return sum*10+root->val;

return sum1(root->left,sum*10+root->val)+sum1(root->right,sum*10+root->val);

}

};

用递归办法做,代码更为简洁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: