LeetCode 之 Sum Root to Leaf Numbers

原题:

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.

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

Return the sum = 12 + 13 = 25.

解题思路:

在每个节点将父节点传下来的的值乘以10加上自己的val,可以获得一个值,然后把这个值传到左右子节点上,最后如果处理到叶子节点的时候,可以得到一条路径的值,然后把所有的路径的和都加在一个int里就可以,要加在一个int,就需要在传参的时候传地址。如图:




代码如下( 20 ms):

class Solution {
public:
    int sumNumbers(TreeNode *root) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        if(root==NULL) return 0;
        int result = 0;
        DFS(root , 0 , result);
     
        return result;   
    }
    
    
    void DFS(TreeNode *root , int num , int &result ){
        
        
        //由于需要保存层的信息,声明一个vector保存两个int
        //第一个为level信息,叶子为1层,别的都保存10^层数,第二层保存10,第三层保存100
        int level = num*10+root->val;
        if(root->left==NULL && root->right==NULL){
            //叶子节点
            result+=level;
            return;
        }
        
        if(root->left){
            DFS(root->left , level , result);
        }

        if(root->right){
            DFS(root->right , level , result);
        }
    }
};


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值