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);
}
};
用递归办法做,代码更为简洁。
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);
}
};
用递归办法做,代码更为简洁。
相关文章推荐
- 数据结构实验之队列一:排队买饭
- oracle新建(还原)、备份数据库
- 安卓手机屏幕分辨率与dip、dp、sp的区别
- MapReduce的Reduce side Join
- JDBC batch批量Statement executeBatch 详细解释
- 数据封装
- secureCRT 启动weblogic 和服务
- Java中StringBuffer和StringBuilder区别
- Cocos2d-x游戏移植到WP8之路 -- c++和c#交互
- 社説 20150610 東京圏の高齢化 膨張する介護需要へ備え急げ
- 怎样解决笔记本电脑键盘输入字母变成数字?
- HTTP协议详解(一)
- HttpServlet实现上传文件
- ios实现两个tableview联动
- 社説 20150609 G7温暖化対策 脱炭素社会への足がかりに
- Oracle数据库的备份方法
- Camera 上层到下层分析
- 黑马程序员java学习笔记——GUI图形化界面
- 【深度探索C++对象模型读书笔记】【第2章】构造函数语意学
- 使用phantomjs实现highcharts等报表通过邮件发送(本文仅提供完整解决方案和实现思路,完全照搬不去整理代码无法马上得到效果)