二叉树大侠帮我看看!!!
- C/C++ code
/*----------------------------------------------------已知二叉树的先序序列为{A,B,C,D,E,F,G},中序序列为{B,D,C,A,F,E,G}.求该二叉树的后续序列。-----------------------------------------------------*/#include<stdio.h>#include<string.h>#include<malloc.h>typedef struct NODE{ char data; struct NODE *lchild; struct NODE *rchild; }*BitTree,BitNode;BitTree T; /*---------------函数声明----------------*/void CreateBitTree(BitTree *T,char *pre,char *in,int len);void PostTraverse(BitTree T);void DestoryBitTree(BitTree *T);/*--------------主函数---------------------*/int main(){ char PreOrderList[]="ABCDEFG",InOrderList[]="BDCAFEG"; int len=strlen(PreOrderList); CreateBitTree(&T,PreOrderList,InOrderList,len); printf("二叉树后续序列为:"); PostTraverse(T); DestoryBitTree(&T); return 0; }/*---------------操作函数的定义--------------*/void DestoryBitTree(BitTree *T) /*销毁二叉树*/{ if(*T!=NULL) { if((*T)->lchild) DestoryBitTree(&(*T)->lchild); if((*T)->rchild) DestoryBitTree(&(*T)->rchild); free(*T); *T=NULL; } }void CreateBitTree(BitTree *T,char *pre,char *in,int len) //根据先序和中序序列建立二叉树{ int k; char *temp; if(len<0) { *T=NULL; } if(T) { *T=(BitTree)malloc(sizeof(BitNode)); (*T)->data=*pre; for(temp=in;temp<in+len;temp++) { if(*temp==*pre) break; } k=temp-in; CreateBitTree(&(*T)->lchild,pre+1,in,k); CreateBitTree(&(*T)->rchild,pre+k+1,temp+1,len-k-1); }}void PostTraverse(BitTree T) /*后续遍历二叉树*/{ if(T) { PostTraverse(T->lchild); PostTraverse(T->rchild); printf("%c",T->data); }}程序没有输出,百思不得其解!!
经过调试发现程序执行完CreateBitTree()后结束了。太怪了!
请大侠帮忙看看!!
[解决办法]
if(len <= 0){*T=0; return;}