#include "stdafx.h"
#include <vector>
struct Node
{
Node * left;
Node * right;
int value;
};
void findPath(Node * root, std::vector<int> path, int sum, int cur_sum)
{
if(root==NULL)
return;
cur_sum += root->value;
path.push_back(root->value);
if(cur_sum == sum && root->left==NULL && root->right == NULL)
{
std::vector<int>::iterator iter = path.begin();
for(;iter!=path.end();iter++)
printf("%d ",*iter);
printf("\n");
}
if(root->left)
findPath(root->left,path,sum,cur_sum);
if(root->right)
findPath(root->right,path,sum,cur_sum);
}
int _tmain(int argc, _TCHAR* argv[])
{
Node * n1 = new Node();
Node * n2 = new Node();
Node * n3 = new Node();
Node * n4 = new Node();
Node * n5 = new Node();
n1->left = n2;
n1->right = n3;
n1->value = 10;
n2->left = n4;
n2->right = n5;
n2->value = 5;
n3->left = NULL;
n3->right = NULL;
n3->value = 12;
n4->left = NULL;
n4->right = NULL;
n4->value = 4;
n5->left = NULL;
n5->right = NULL;
n5->value = 7;
std::vector<int> path;
findPath(n1, path, 22, 0);
return 0;
}