其实这题没啥好说的,但是考虑到这个博客还是要让所有人看懂,所以我画个图: 考虑这个二叉树,其实你在使用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; } };