题目描述
给定一个仅包含数字 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
这颗二叉树一共有两条路径,
根节点到叶子节点的路径 1→2 用数字 12 代替
根节点到叶子节点的路径 1→3 用数字 13 代替
所以答案为12+13=25。
思路:因为要求每条根节点到叶子结点的路径和。那么其实就是一个找到所有路径问题。可以通过递归的方式,由根节点不断向下遍历,找到所有的路径,并按照题目的要求计算路径和。
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
// 递归遍历
void dfs(TreeNode* root, int num)
{
if(!root) return;
//if(root->left) //搜索左子树, 并将和传递下去
dfs(root->left, num*10+root->val);
//if(root->right) //搜索右子树
dfs(root->right, num*10+root->val);
num = num * 10 + root->val;
if(!root->left && !root->right){ //叶子结点,将和保存
ans += num;
}
}
int sumNumbers(TreeNode* root) {
// write code here
//很明显,可以采用递归的方式的计算
dfs(root, 0);
return ans;
}
int ans = 0;
};


京公网安备 11010502036488号