#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define MAX_HEIGHT 10 #define LEAF -1 typedef struct BTreenode{ BTreenode* lchild; BTreenode* rchild; int value; }BTreenode,*Btree; BTreenode* createTree(){ BTreenode* T; int t; scanf("%d",&t); if(t==LEAF){ T = NULL; }else{ T = (BTreenode *) malloc(sizeof(BTreenode)); T->value = t; T->lchild = createTree(); T->rchild = createTree(); } return T; } void dumpPath(int *path,int depth){ printf("dumpPath: "); for(int i = 0;i < depth;i++){ printf("%d ",path[i]); } printf("\n"); } int isLeaf(BTreenode *t){ //printf("isLeaf();\n"); if(t->lchild == NULL && t->rchild == NULL){ return 1; } return 0; } void doSearch(BTreenode *root,int sum,int *path,int depth){ path[depth++] = root->value; sum -= root->value; if(isLeaf(root) ||root == NULL){ if(sum == 0){ dumpPath(path,depth); } return; }else{ if(root->lchild != NULL){ doSearch(root->lchild,sum,path,depth); } if(root->rchild != NULL){ doSearch(root->rchild,sum,path,depth); } } sum += root->value; depth--; } void printPaths(BTreenode *root,int sum){ int path[MAX_HEIGHT]; doSearch(root,sum,path,0); } void preOrder(BTreenode * root){ if(root!=NULL){ printf("%d ",root->value); } if(root->lchild != NULL){ preOrder(root->lchild); } if(root->rchild !=NULL){ preOrder(root->rchild); } } main(){ BTreenode *T = createTree(); //preOrder(T); printf("\n"); printPaths(T,22); system("pause"); return 0; }