1.题目
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.
For example,
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.
2.解题
题目的意思是计算二叉树所有从根到叶节点路径“节点值的和”的和。
这里的从根到叶的路径“节点值之和”并不是相加,而是根据不同层代表着在“和”的十进制表示中相应位的值。
比如说,一个如下二叉树,从根到左节点为1->2,也就是12,从根到有节点为1->3,也就是13,其和为25。
这道题没有什么难点,只需要对二叉树进行一次遍历,遍历的时候记住从根到每个节点的值和,在到达叶节点时输出即可。
对二叉树的前序遍历稍加改进:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int sumNumbers(struct TreeNode *root) {
struct TreeNode **stack=(struct TreeNode **)malloc(sizeof(struct TreeNode *)*32);
int *s=(int *)malloc(sizeof(int)*32);
int top=0;
int sum=0;
int path=0;
while(root||top>0)
{
if (root)
{
path=path*10+root->val;
//下面这个判断是唯一需要改进的地方
if (root->right==NULL&&root->left==NULL)
{
sum+=path;
}
stack[top]=root;
s[top++]=path;
root=root->left;
}
else
{
root=stack[--top];
path=s[top];
root=root->right;
}
}
free(stack);
free(s);
return sum;
}
需要注意的是,需要两个栈来分别保存节点和根到该节点的和。
可能第二个栈不需要,但我没有继续往下考虑。