//129. 求根到叶子节点数字之和
//使用dfs深度遍历二叉树
//遍历的同时维护一个数组,记录从跟节点到当前节点路径中的数字
//遍历到叶子节点的时候,将数组中的所有数字加到ans上
//注意:不要忘了返回的时候,删除元素
class Solution {
public:
int ans = 0;
void dfs(vector<int>& s, TreeNode* node) {
if (node == NULL) return;
s.emplace_back(node->val);
if (node->left == NULL && node->right == NULL) {
int cnt = 0;
for (auto x : s) {
cnt = cnt * 10 + x;
}
ans += cnt;
}
else {
dfs(s, node->left);
dfs(s, node->right);
}
s.pop_back();
}
int sumNumbers(TreeNode* root) {
vector<int>s;
dfs(s, root);
return ans;
}
};
//使用dfs,向下传递数字
//遍历到当前节点,就让数字 * 10加上当前节点的值,继续向下传递
//碰到叶子节点,就返回数字
//其他节点就返回dfs左右子节点的和
class Solution {
public:
int dfs(TreeNode* node, int sum) {
if (node == NULL) return 0;
sum = sum * 10 + node->val;
if (node->left == NULL && node->right == NULL) return sum;
else return dfs(node->left, sum) + dfs(node->right, sum);
}
int sumNumbers(TreeNode* root) {
return dfs(root, 0);
}
};
LeetCode129. 求根到叶子节点数字之和
最新推荐文章于 2023-07-01 12:29:35 发布