力扣129. 求根节点到叶节点数字之和
依然是遍历树,这个题目和之前的题目都好像:
力扣112. 路径总和
在dfs遍历的过程中构造数字,当到达叶子节点的时候就累加。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public://到叶子节点生成一个数字,然后把这些数字累加//需要注意的是有一种情况,根节点只有一个孩子,此时它不能被算作叶子节点//1//2 3int sum;void dfs(TreeNode* root,int result){if(root==nullptr){return ;}else{if(root->left==nullptr&&root->right==nullptr){//说明是叶子节点//那么就可以把这个数放到result=result*10+root->val;sum+=result;return ;}dfs(root->left,result*10+root->val);dfs(root->right,result*10+root->val);}}int sumNumbers(TreeNode* root) {dfs(root,0);return sum;}
};
时间复杂度O(n)