129. 求根到叶子节点数字之和
其实这题没啥好说的,但是考虑到这个博客还是要让所有人看懂,所以我画个图:
考虑这个二叉树,其实你在使用dfs向下遍历的时候,就可以计算答案了。把父节点的值累加到儿子节点上去。
比如最左边的链路,开始时1,然后走到2的时候,1相当于进位了,就变成了10,所以这个节点的之值就变成了12,然后3也是,成了13.变成了下面这棵树:
然后12继续往下走,就成了120,所以当前节点的值被更新为:当你发现到了叶子节点上,就可以开始统计答案了。
所以代码也很简洁:
/**
* 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 ans=0;
void dfs(TreeNode *root,int base){
if(root==NULL){
return ;
}
// 父亲节点传过来的值扩大十倍,作为当前的值。
base=base*10+root->val;
if(root->right==NULL&&root->left==NULL){
// 道叶子节点上去了,开始统计一下答案。
ans+=base;
}
dfs(root->left,base);
dfs(root->right,base);
}
int sumNumbers(TreeNode* root) {
dfs(root,0);
return ans;
}
};