【学习点滴-数据结构-二叉树】和为某一值的二叉树路径~

来源:互联网 发布:软件开发技术风险 编辑:程序博客网 时间: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;}


原创粉丝点击