leetcode:Sum Root to Leaf Numbers

一、 题目

给一个二叉树,其中节点只可能是数字0-9,每一条路径组成一个数。

如下:

      1

    /  \

      2   3

左边路径1->2 代表 12.

右边路径1->3 代表 13.

  sum = 12 + 13 = 25.

二、 分析

想起了一句话,树的问题可归结为递归问题,这道题也一样,每次经过一个节点会遇到三中情况:

1、不包含左/右节点;

2、普通节点,即拥有有效的左或右节点;

3、无效节点(NULL)

而这三种情况对应于递归实现中的三种不同的实现方式:

1、sum * 10 + root->val;

2、helper(root->left, sum * 10 + root-val) + helper(root->right, sum * 10 + root-val);

3、return 0

代码:

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int helper(TreeNode *root, int sum){
        if(root == NULL)
            return 0;
        if(root->left == NULL && root->right == NULL){
            return (sum * 10 + root->val);
        }
        else {
            return helper(root->left, sum * 10 + root->val) + helper(root->right, sum * 10 + root->val);
        }
    }
    int sumNumbers(TreeNode *root) {
            return helper(root, 0);
    }
};


另一种思路是每当遇到一个叶子节点时就将当前的和加入到总和中,即sumc_sum,直到遍历完所有的叶子节点。

如下:

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void helper(TreeNode *root, int &sum, int c_sum){
        if(root == NULL)
            return ;
        c_sum = c_sum * 10 + root->val;
        helper(root->left, sum, c_sum);
        helper(root->right, sum, c_sum);
        if(root->left == NULL && root->right == NULL)
            sum += c_sum;
    }
    int sumNumbers(TreeNode *root) {
        int sum = 0;
        helper(root, sum, 0);
        return sum;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值