中序+后序确定二叉树

#include
#define maxn 335
using namespace std;
int n;
int lod[maxn];//后序序列 
int mod[maxn];//先序序列 
int cnt=0;
struct node//结点结构体 
{
    int l;
    int r;
    int v;
    node (): l(0) , r(0) {}
};
node data[maxn];
int dfs(int la[],int mo[], int len)
{
	//该结点不存在 
    if(len<=0)
		return -1;
    int k=0;
    //后序的最后一个结点就是根节点,找到根节点在中序序列中的位置 
    for(int i=0;i> n;
    for(int i = 0 ; i < n ; ++i)
        scanf("%d",&lod[i]);
    for(int i = 0 ; i < n ; ++i)
        scanf("%d",&mod[i]);
    int rt = dfs(lod,mod,n);
    queue q;
    q.push(rt);
	bool first = 1;
	//层序遍历 
	while (!q.empty())
	{
		int fr=q.front();
		q.pop();
		if(data[fr].l!=-1)
			q.push(data[fr].l);
		if (data[fr].r!=-1)
			q.push(data[fr].r);
		if(first)
			first=0;
		else printf(" ");
		printf("%d",data[fr].v);
	}
	printf("\n");
}

 

你可能感兴趣的:(二叉树)