LeetCode129. 求根到叶子节点数字之和

//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);
  }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值