leetcode 129 求根结点到叶结点数字之和
DFS or BFS
思路:
DFS
- 深度优先遍历树,每一层和 sum 都 * 10;
- 到叶子结点直接加上个位数返回;
BFS
- 广度优先遍历树模板
- 压入父节点时,把父节点的val * 10 加入子结点上
题解
DFS:
class Solution {
public:
int sumNumbers(TreeNode* root) {
return dfs(root, 0);
}
long long dfs(TreeNode *root, long long sum) {
if(!root) return 0;
// 叶子结点直接加上个位数返回
if(!root->left && !root->right) return sum + root->val;
sum += root->val;
// 每下一层当前值 * 10
return dfs(root->left, sum * 10) + dfs(root->right, sum * 10);
}
};
BFS:
class Solution {
public:
queue<TreeNode *> q;
//常规的bfs模板+把父结点*10加入儿子中
int sumNumbers(TreeNode* root) {
if(!root) return 0;
q.push(root);
int ans=0;
while(!q.empty()){
int size=q.size();
for(int i=0;i<size;i++) {
auto cur=q.front();q.pop();
//碰到叶子节点直接入ans
if(!cur->left&&!cur->right) ans+=cur->val;
//把原有节点*10加到子节点上
if(cur->left) {
cur->left->val+=cur->val*10;
q.push(cur->left);
}
if(cur->right) {
cur->right->val+=cur->val*10;
q.push(cur->right);
}
}
}
return ans;
}
};