leetcode 22:sum-root-to-leaf-numbers

题目描述

给定一个仅包含数字 0−9\ 0-9 09 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1→2→31\to 2\to 3123,那么这条路径就用 123\ 123 123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:

这颗二叉树一共有两条路径,
根节点到叶子节点的路径 1→21\to 212 用数字 12\ 12 12 代替
根节点到叶子节点的路径 1→31\to 313 用数字 13\ 13 13 代替
所以答案为 12+13=25\ 12+13=25 12+13=25
题目分析:
这个题和剑指offer中和为某一值的路径基本一致。代码如下:
 1 void sumNumbersCore(TreeNode* root,int &pathNum,int &sum)
 2     {
 3         if(root)
 4         {
 5             pathNum = pathNum * 10 + root->val;
 6             //如果是叶子节点,一条搜索路径完成,累加到sum
 7             if(!root->left && !root->right)
 8             {
 9                 sum += pathNum;
10             }
11             else
12             {
13                 if(root->left)
14                     sumNumbersCore(root->left,pathNum, sum);
15                 if(root->right)
16                     sumNumbersCore(root->right,pathNum, sum);
17             }
18             //返回父节点之前,路径上删除当前节点
19             pathNum /= 10;
20         }
21     }
22     int sumNumbers(TreeNode* root) {
23         // write code here
24         int pathNum = 0;
25         int sum = 0;
26         sumNumbersCore(root,pathNum,sum);
27         return sum;
28     }

 

 
posted @ 2020-08-16 14:03  请叫我小小兽  阅读(248)  评论(0编辑  收藏  举报