根据二叉树的先序遍历和中序遍历构造二叉树是非常经典的一道算法题目,但是在网上找到的资料绝大多数都是使用链接方式构造二叉树,感觉这样比较繁琐,因此自己写了一个数组实现的程序,当然,程序不算很完善,还望朋友们多指教。
构造思路:在先序序列中的第一个字符一点是树的根节点,然后在中序序列中找到这个根的位置,它的前面的全部字符构成左子树的中序序列,后面的全部字符构成右子树的中序序列,而先序序列中根后面紧跟着的相同长度字符串为左子树的先序序列,同理找到右子树的先序序列,然后进行函数的递归调用,构造出所有子树。
//测试样例:
//ABCDEFG
//CBEDAFG
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
char tree[1000];
char leftpre[1000];
char leftin[1000];
char rightpre[1000];
char rightin[1000];
void build(char *preorder,char *inorder,int length,int index)
{
if(length==0)return ;
tree[index] = preorder[0];
/* cout<<"index :"<<index;
cout<<" tree[index] :"<<tree[index];
cout<<" preorder[0] :"<<preorder[0];
cout<<" length :"<<leng