DFS(深度搜索)+回溯
class Solution {
public:
int sumNumbers(TreeNode* root) {
if (!root) return 0;
int res = 0;
dfs(root, 0, res);
return res;
}
private:
void dfs(TreeNode* root, int sub, int &res) {
// sub存的是根到叶子节点的路径和
// res记录所有路径的和
if (!root) return;
// 将root节点加上
sub = sub * 10 + root->val;
// 遍历到叶结点了,加到总和中
if (root->left == root->right) {
res += sub;
return;
}
// 递归左右节点,这里有sub就相当于回溯了
dfs(root->left, sub, res);
dfs(root->right, sub, res);
}
五一休息还是要整理一下树的知识点,还是有点乱,理清一下思路。
原文:https://www.cnblogs.com/lzyrookie/p/14698090.html