先序遍历和中序遍历构建二叉树详解
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200427120837211.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxMTc3MzMwNDIwOQ==,size_16,color_FFFFFF,t_70)
#include<iostream>
#include<stdio.h>
using namespace std;
typedef struct BTreeNode {
int data;
BTreeNode *Lchild, *Rchild;
}Bnode, *ptr;
ptr buildtree(int a[], int b[], int i, int j, int s, int t)
{
if (i > j)return NULL;
ptr newroot = new Bnode;
newroot->data = a[i];
int k = s;
while (k < t && a[i] != b[k]) k++;
newroot->Lchild = buildtree(a, b, i + 1, i + k - s, s, k - 1);
newroot->Rchild = buildtree(a, b, i + k - s + 1, j, k + 1, t);
return newroot;
}
void main()
{
int preOrder[5] = { 1, 2, 4, 5, 3 };
int inOrder[5] = { 4, 2 ,5, 1, 3 };
ptr tree = buildtree(preOrder, inOrder, 0, 4, 0, 4);
getchar();
}