leetcode 22:sum-root-to-leaf-numbers
题目描述
给定一个仅包含数字 0−9\ 0-9 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1→2→31\to 2\to 31→2→3,那么这条路径就用 123\ 123 123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
例如根节点到叶子节点的一条路径是1→2→31\to 2\to 31→2→3,那么这条路径就用 123\ 123 123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
这颗二叉树一共有两条路径,
根节点到叶子节点的路径 1→21\to 21→2 用数字 12\ 12 12 代替
根节点到叶子节点的路径 1→31\to 31→3 用数字 13\ 13 13 代替
所以答案为 12+13=25\ 12+13=25 12+13=25
根节点到叶子节点的路径 1→21\to 21→2 用数字 12\ 12 12 代替
根节点到叶子节点的路径 1→31\to 31→3 用数字 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 }