先声明一个结构体:二叉树的三个元素,数据域,左子树,右子树。
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(i<number && in[i]!=c)i++; int leftNumber = i; int rightNumber = number - i - 1; BitTree *node = (BitTree *)malloc(sizeof(BitTree)); node->data = 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; }