现在的位置: 首页 > 综合 > 正文

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

2013年09月19日 ⁄ 综合 ⁄ 共 1244字 ⁄ 字号 评论关闭
#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;
}

抱歉!评论已关闭.