思路:把二叉树遍历一遍,遍历过程中,左孩子的值=父节点的值*10+左孩子的值,右孩子同理,这样每次遍历到叶子节点,叶子节点的值都会改为该条路径的值,利用sum把这些值加起来即可;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int sumNumbers(TreeNode *root)
{
//把二叉树遍历一遍,把遍历的路径值存放在叶子节点中,用sum值保存叶子节点的值'
if (!root)
{
return 0;
}
int sum = 0;
travel(root, sum);
return sum;
}
void travel(TreeNode *root, int &sum)
{
if (root->left == nullptr && root->right == nullptr) //叶子节点
{
sum += root->val;
return;
}
if (root->left) //存在左孩子,继续遍历
{
root->left->val = (root->val) * 10 + root->left->val;
travel(root->left, sum);
}
if (root->right) //存在右孩子,继续遍历
{
root->right->val = (root->val) * 10 + root->right->val;
travel(root->right, sum);
}
}