//
#include "stdafx.h"
#include
#include
using namespace std;
struct BtreeNode {
int v;
struct BtreeNode *left;
struct BtreeNode *right;
};
BtreeNode* insertNode(BtreeNode* root, int value) {
BtreeNode* ptr=root;
BtreeNode* tmpNode;
BtreeNode* newNode = (BtreeNode*)malloc(sizeof(struct BtreeNode));
newNode->v = value;
newNode->left = NULL;
newNode->right = NULL;
if (ptr == NULL)
return newNode;
while (ptr != NULL) {
tmpNode = ptr;
if (ptr->v < value)
ptr = ptr->right;
else
ptr = ptr->left;
}
if (tmpNode->v < value)
tmpNode->right = newNode;
else
tmpNode->left = newNode;
return root;
}
BtreeNode* buildTree() {
BtreeNode* root = NULL;
int a;
while (cin>>a) {
root = insertNode(root, a);
}
return root;
}
void findPath(BtreeNode *root, int excepetedSum, vector
currentSum += root->v;
path.push_back(root->v);
if (root->left == NULL && root->right == NULL && currentSum == excepetedSum) {
vector
for (iter = path.begin(); iter != path.end(); iter++)
cout << *iter << " ";
}else {
if (root->left != NULL)
findPath(root->left, excepetedSum, path, currentSum);
if (root->right != NULL)
findPath(root->right, excepetedSum, path, currentSum);
}
currentSum -= root->v;
path.pop_back();
}
int _tmain(int argc, _TCHAR* argv[])
{
BtreeNode* root;
root = buildTree();
vector
findPath(root, 22, path, 0);
system("pause");
return 0;
}