LeetCode 129. Sum Root to Leaf Numbers(二叉树)

题目来源:https://leetcode.com/problems/sum-root-to-leaf-numbers/

问题描述

129. Sum Root to Leaf Numbers

Medium

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.

An example is the root-to-leaf path 1->2->3 which represents the number 123.

Find the total sum of all root-to-leaf numbers.

Note: A leaf is a node with no children.

Example:

Input: [1,2,3]

    1

   / \

  2   3

Output: 25

Explanation:

The root-to-leaf path 1->2 represents the number 12.

The root-to-leaf path 1->3 represents the number 13.

Therefore, sum = 12 + 13 = 25.

Example 2:

Input: [4,9,0,5,1]

    4

   / \

  9   0

 / \

5   1

Output: 1026

Explanation:

The root-to-leaf path 4->9->5 represents the number 495.

The root-to-leaf path 4->9->1 represents the number 491.

The root-to-leaf path 4->0 represents the number 40.

Therefore, sum = 495 + 491 + 40 = 1026.

------------------------------------------------------------

题意

二叉树每一条从根节点到叶节点的路径构成一个十进制整数,求这些十进制整数的和。

------------------------------------------------------------

思路

递归

------------------------------------------------------------

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
private:
    /**
    * Paramters:
    *   root: current node on path
    *   num: current number on path from root to left
    *   ans: sum of numbers
    */
    void dfs(TreeNode* root, int num, int& ans) {
        if (!root) {
            return;
        }
        num  = num * 10 + root->val;
        if (!root->left && !root->right) {
            ans += num;
        }
        dfs(root->left, num, ans);
        dfs(root->right, num, ans);
        num /= 10;
    }

public:
    int sumNumbers(TreeNode* root) {
        int ans = 0;
        dfs(root, 0, ans);
        return ans;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值