先声明一个结构体:二叉树的三个元素,数据域,左子树,右子树。
typedef char ElemType;typedef struct Node { ElemType data; struct Node *lchild,*rchild;}BitTree;
声明函数:返回值:二叉树
pre:先序遍历字符串
in:中序遍历字符串
number:字符串长度
BitTree *createBinTreeByPreIn(char *pre,char *in,int number);
二叉树问题我喜欢使用递归方法解决,实现起来比较简单,但是效率可能有点低。
使用递归时最重要的一个就是结束条件,下面是具体实现。
结束条件:当字符串长度为0。
BitTree *createBinTreeByPreIn(char *pre,char *in,int number){ if(number==0) return NULL; char c = pre[0]; int i = 0; while(idata = c; node->lchild = createBinTreeByPreIn(&pre[1],&in[0],leftNumber); node->rchild = createBinTreeByPreIn(&pre[leftNumber+1],&in[leftNumber+1],rightNumber); return node;}
最后主函数测试一下:
int main(int argc,char **argv){ char a[SIZE],b[SIZE]; BitTree *p; while(scanf("%s%s",a,b)!=EOF) { p = createBinTreeByPreIn(a,b,strlen(a)); printf("\n"); } return 0;}