129. Sum Root to Leaf Numbers
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,
1 / \ 2 3
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
.
Code:
#include<iostream>
using namespace std;
class node {
public:
int num;
//int sum;
node * left;
node * right;
node() {}
node(int n) { this->num = n; }
};
void insert(node * t, int num)
{
node *corrent = t;
if (corrent->num < num&&corrent->right != NULL)
insert(corrent->right, num);
else if (corrent->num > num&&corrent->left != NULL)
insert(corrent->left, num);
else
{
if (corrent->num < num)
corrent->right = new node(num);
else if (corrent->num > num)
corrent->left = new node(num);
return;
}
}
/*
void bianli(node *t,int &sum)
{
node *corrent = t;
if (corrent->left == NULL && corrent->right == NULL)
{
cout << corrent->sum << endl;
sum += corrent->sum;
return;
}
if (corrent->left != NULL)
{
corrent->left->sum += corrent->sum*10;
bianli(corrent->left,sum);
}
if (corrent->right != NULL)
{
corrent->right->sum += corrent->sum*10;
bianli(corrent->right,sum);
}
}
*/
int bianli(node *t,int pre)
{
if (t == NULL)
return 0;
else
{
int tmp = pre * 10 + t->num;
if (t->left == NULL&&t->right == NULL)
{
cout << tmp << endl;
return tmp;
}
else
{
return bianli(t->left, tmp) + bianli(t->right, tmp);
}
}
}
int main()
{
node *T = NULL;
T = new node(5);
int sum=0;
insert(T, 0);
insert(T, 1);
insert(T, 2);
insert(T, 3);
insert(T, 4);
insert(T, 8);
insert(T, 6);
insert(T, 7);
insert(T, 9);
sum=bianli(T,0);
//cout << "T->left:" << T->left->num << endl;
//cout << "T->right:" << T->right->num << endl;
cout << sum<<endl;
system("pause");
}