#include<bits/stdc++.h>
using namespace std;
typedef char ElemType;
#define MAXSIZE 100
//二叉树的二叉链表存储表示
typedef struct BiNode
{
ElemType data; //结点数据域
struct BiNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
BiTree PreInCreat(ElemType A[], ElemType B[], int l1, int h1, int l2, int h2)
{
/*************Begin*************/
int i,llen,alen;
BiTree a = (BiTree)malloc(sizeof(BiTNode));
a->data=A[l1];
for(i=l2;B[i]!=a->data;i++);
llen=i-l2;
alen=h2-i;
if(llen){
a->lchild=PreInCreat(A,B,l1+1,l1+llen,l2,l2+llen-1);
}
else a->lchild=NULL;
if(alen){
a->rchild=PreInCreat(A,B,h1-alen+1,h1,h2-alen+1,h2);
}
else a->rchild=NULL;
return a;
/************End*****************/
}
void InOrderTraverse(BiTree T)
{
//中序遍历二叉树T的递归算法
if(T)
{
InOrderTraverse(T->lchild);
cout << T->data;
InOrderTraverse(T->rchild);
}
}
int main()
{
BiTree tree;
ElemType A[MAXSIZE], B[MAXSIZE];
int n;
cin >> n;
for(int i = 0; i < n; i ++)
cin >> A[i + 1];
for(int i = 0; i < n; i ++)
cin >> B[i + 1];
tree = PreInCreat(A, B, 1, n, 1, n);
InOrderTraverse(tree);
}
第1关:先序遍历和中序遍历决定二叉树
最新推荐文章于 2024-07-12 18:56:03 发布