已知:任一个二叉树的中序序列和前序序列,编写一程序根据输入的两个序列自动构造出二叉树,并输出该二叉树的后序遍历序列。
找到一个程序运行不正确~~
#include <iostream.h>
#define LENGTH 7
struct Tree
//二叉树结点结构
{
 char data;
 Tree * _lchild;
 Tree * _rchild;
};
Tree * Create(char * preT,char * inT,int n)
//初始条件:前序序列preT存在,中序序列inT存在,n为结点数
//根据已给前序与中序序列数据构造二叉树
{
 if(n <= 0) return NULL;
 Tree *p = new Tree; //给新建结点分配空间
 p->data = *preT;
 int i;
 char * tp;
 for(tp = inT;tp < inT + n;tp++)
  if(*tp == *preT) break;
 i = tp - inT;
 p->_lchild = Create(preT+1,inT,i);
//左子树递归,前序序列是每次增一的过程,中序仍从inT开始,n长度一直在变化,为preT结点
//前面的部分长度
 p->_rchild = Create(preT+1+i,tp+1,n-i-1);
//右字树递归,前序从每次相对根结点的右半部分开始,中序序列从相对根结点的右边第一
//结点开始,长度为n-i-1
 return(p);
}
void printPreOrder(Tree * root)
//按前序遍历打印二叉树
{
 if(root == NULL) return;
 cout<<root->data;
 printPreOrder(root->_lchild);
 printPreOrder(root->_rchild);
}
void printInOrder(Tree * root)
//按中序遍历打印二叉树
{
 if(root == NULL) return;
 printInOrder(root->_lchild);
 cout<<root->data;
 printInOrder(root->_rchild);
}
void main()
{
 char preOrder[LENGTH] = {'A','B','D','E','C','F','G'};
 char inOrder[LENGTH] = {'D','B','E','A','F','C','G'};
 Tree * root = Create(preOrder,inOrder,LENGTH);
 printPreOrder(root);
 cout<<'\n';
 printInOrder(root);
cout<<'\n'; 
}