描述
给定一个二叉树的根节点root,该树的节点值都在数字\ 0-9 0−9 之间,每一条从根节点到叶子节点的路径都可以用一个数字表示。找出根节点到叶子节点的所有路径表示的数字之和。
例如:
这颗二叉树一共有两条路径,
根节点到叶子节点的路径 1→2 用数字12 代替
根节点到叶子节点的路径 1→3 用数字13 代替
所以答案为12+13=25
要求:空间复杂度 O(n),时间复杂度 O(n^2)
进阶:空间复杂度 O(n),时间复杂度 O(n)
解题思路:dfs
解决方式就是从根节点往下走的时候,那么当前节点的值就是父节点的值*10+当前节点的值。默认根节点的父节点的值是0,如果到达叶子结点,就用一个全局的变量把叶子结点的值加起来。
class Solution {
public:
int ans=0;
int sumNumbers(TreeNode* root) {
if(root==nullptr) return 0;
dfs(root,root->val);
return ans;
}
void dfs(TreeNode* now, int sum){
if(now->left== NULL && now->right==NULL){
ans+=sum;
return;
}
if(now->left){
dfs(now->left,sum*10+now->left->val);
}
if(now->right){
dfs(now->right,sum*10+now->right->val);
}
}
};