#include<stdio.h>
#include<stdlib.h>
/* A binary tree node has data, pointer to left child
and a pointer to right child */
struct node
{
int data;
struct node* left;
struct node* right;
};
/* Prototypes for funtions needed in printPaths() */
void printPathsRecur(struct node* node, int path[], int pathLen,int sum);
void printArray(int ints[], int len);
/*Given a binary tree, print out all of its root-to-leaf
paths, one per line. Uses a recursive helper to do the work.*/
void printPaths(struct node* node,int sum)
{
int path[1000];
printPathsRecur(node, path, 0, sum);
}
/* Recursive helper function -- given a node, and an array containing
the path from the root node up to but not including this node,
print out all the root-leaf paths.*/
void printPathsRecur(struct node* node, int path[], int pathlen,int sum)
{
if(node==NULL)
return;
path[pathlen] = node->data;
sum-=node->data;
pathlen++;
if(node->left==NULL && node->right==NULL && sum==0)
{
printArray(path,pathlen);
}
else
{
printPathsRecur(node->left,path,pathlen,sum);
printPathsRecur(node->right,path,pathlen,sum);
}
}
/* UTILITY FUNCTIONS */
/* Utility that prints out an array on a line. */
void printArray(int ints[], int len)
{
int i;
for (i=0; i<len; i++)
{
printf("%d ", ints[i]);
}
printf("\n");
}
/* utility that allocates a new node with the
given data and NULL left and right pointers. */
struct node* newnode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
/* Driver program to test above functions*/
int main()
{
/* Constructed binary tree is
10
/ \
8 2
/ \ /
3 5 2
*/
struct node *root = newnode(10);
root->left = newnode(8);
root->right = newnode(2);
root->left->left = newnode(3);
root->left->right = newnode(5);
root->right->left = newnode(2);
int sum = 14;
printPaths(root,sum);
getchar();
return 0;
}
ICAgICNpbmNsdWRlPHN0ZGlvLmg+CiAgICAjaW5jbHVkZTxzdGRsaWIuaD4KICAgICAKICAgIC8qIEEgYmluYXJ5IHRyZWUgbm9kZSBoYXMgZGF0YSwgcG9pbnRlciB0byBsZWZ0IGNoaWxkCiAgICAgIGFuZCBhIHBvaW50ZXIgdG8gcmlnaHQgY2hpbGQgKi8KICAgIHN0cnVjdCBub2RlCiAgICB7CiAgICBpbnQgZGF0YTsKICAgIHN0cnVjdCBub2RlKiBsZWZ0OwogICAgc3RydWN0IG5vZGUqIHJpZ2h0OwogICAgfTsKICAgICAKICAgIC8qIFByb3RvdHlwZXMgZm9yIGZ1bnRpb25zIG5lZWRlZCBpbiBwcmludFBhdGhzKCkgKi8KICAgIHZvaWQgcHJpbnRQYXRoc1JlY3VyKHN0cnVjdCBub2RlKiBub2RlLCBpbnQgcGF0aFtdLCBpbnQgcGF0aExlbixpbnQgc3VtKTsKICAgIHZvaWQgcHJpbnRBcnJheShpbnQgaW50c1tdLCBpbnQgbGVuKTsKICAgICAKICAgIC8qR2l2ZW4gYSBiaW5hcnkgdHJlZSwgcHJpbnQgb3V0IGFsbCBvZiBpdHMgcm9vdC10by1sZWFmCiAgICAgcGF0aHMsIG9uZSBwZXIgbGluZS4gVXNlcyBhIHJlY3Vyc2l2ZSBoZWxwZXIgdG8gZG8gdGhlIHdvcmsuKi8KICAgIHZvaWQgcHJpbnRQYXRocyhzdHJ1Y3Qgbm9kZSogbm9kZSxpbnQgc3VtKQogICAgewogICAgaW50IHBhdGhbMTAwMF07CiAgICBwcmludFBhdGhzUmVjdXIobm9kZSwgcGF0aCwgMCwgc3VtKTsKICAgIH0KICAgICAKICAgIC8qIFJlY3Vyc2l2ZSBoZWxwZXIgZnVuY3Rpb24gLS0gZ2l2ZW4gYSBub2RlLCBhbmQgYW4gYXJyYXkgY29udGFpbmluZwogICAgIHRoZSBwYXRoIGZyb20gdGhlIHJvb3Qgbm9kZSB1cCB0byBidXQgbm90IGluY2x1ZGluZyB0aGlzIG5vZGUsCiAgICAgcHJpbnQgb3V0IGFsbCB0aGUgcm9vdC1sZWFmIHBhdGhzLiovCiAgICB2b2lkIHByaW50UGF0aHNSZWN1cihzdHJ1Y3Qgbm9kZSogbm9kZSwgaW50IHBhdGhbXSwgaW50IHBhdGhsZW4saW50IHN1bSkKICAgIHsKICAgIGlmKG5vZGU9PU5VTEwpCiAgICByZXR1cm47CiAgICBwYXRoW3BhdGhsZW5dID0gbm9kZS0+ZGF0YTsKICAgIHN1bS09bm9kZS0+ZGF0YTsKICAgIHBhdGhsZW4rKzsKICAgIGlmKG5vZGUtPmxlZnQ9PU5VTEwgJiYgbm9kZS0+cmlnaHQ9PU5VTEwgJiYgc3VtPT0wKQogICAgewogICAgcHJpbnRBcnJheShwYXRoLHBhdGhsZW4pOwogICAgfQogICAgZWxzZQogICAgewogICAgcHJpbnRQYXRoc1JlY3VyKG5vZGUtPmxlZnQscGF0aCxwYXRobGVuLHN1bSk7CiAgICBwcmludFBhdGhzUmVjdXIobm9kZS0+cmlnaHQscGF0aCxwYXRobGVuLHN1bSk7CiAgICB9CiAgICB9CiAgICAgCiAgICAvKiBVVElMSVRZIEZVTkNUSU9OUyAqLwogICAgLyogVXRpbGl0eSB0aGF0IHByaW50cyBvdXQgYW4gYXJyYXkgb24gYSBsaW5lLiAqLwogICAgdm9pZCBwcmludEFycmF5KGludCBpbnRzW10sIGludCBsZW4pCiAgICB7CiAgICBpbnQgaTsKICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKQogICAgewogICAgcHJpbnRmKCIlZCAiLCBpbnRzW2ldKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgICAKICAgIC8qIHV0aWxpdHkgdGhhdCBhbGxvY2F0ZXMgYSBuZXcgbm9kZSB3aXRoIHRoZQogICAgICBnaXZlbiBkYXRhIGFuZCBOVUxMIGxlZnQgYW5kIHJpZ2h0IHBvaW50ZXJzLiAqLwogICAgc3RydWN0IG5vZGUqIG5ld25vZGUoaW50IGRhdGEpCiAgICB7CiAgICBzdHJ1Y3Qgbm9kZSogbm9kZSA9IChzdHJ1Y3Qgbm9kZSopCiAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CiAgICBub2RlLT5kYXRhID0gZGF0YTsKICAgIG5vZGUtPmxlZnQgPSBOVUxMOwogICAgbm9kZS0+cmlnaHQgPSBOVUxMOwogICAgIAogICAgcmV0dXJuKG5vZGUpOwogICAgfQogICAgIAogICAgLyogRHJpdmVyIHByb2dyYW0gdG8gdGVzdCBhYm92ZSBmdW5jdGlvbnMqLwogICAgaW50IG1haW4oKQogICAgewogICAgIAogICAgLyogQ29uc3RydWN0ZWQgYmluYXJ5IHRyZWUgaXMKICAgICAgMTAKICAgICAgLyBcCiAgICAgIDggMgogICAgICAvIFwgLwogICAgICAzIDUgMgogICAgICAqLwogICAgc3RydWN0IG5vZGUgKnJvb3QgPSBuZXdub2RlKDEwKTsKICAgIHJvb3QtPmxlZnQgPSBuZXdub2RlKDgpOwogICAgcm9vdC0+cmlnaHQgPSBuZXdub2RlKDIpOwogICAgcm9vdC0+bGVmdC0+bGVmdCA9IG5ld25vZGUoMyk7CiAgICByb290LT5sZWZ0LT5yaWdodCA9IG5ld25vZGUoNSk7CiAgICByb290LT5yaWdodC0+bGVmdCA9IG5ld25vZGUoMik7CiAgICBpbnQgc3VtID0gMTQ7IAogICAgcHJpbnRQYXRocyhyb290LHN1bSk7CiAgICAgCiAgICBnZXRjaGFyKCk7CiAgICByZXR1cm4gMDsKICAgIH0=