【学习点滴-数据结构-二叉树】和为某一值的二叉树路径~
来源:互联网 发布:软件开发技术风险 编辑:程序博客网 时间:2024/05/01 06:50
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define MAX_HEIGHT 10#define LEAF -1typedef 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;}