L2-006. 树的遍历(后序 中序 还原)

L2-006. 树的遍历

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
4 1 6 3 5 7 2
 
  
#include "iostream"
#include "queue"
#include "stdio.h"
using namespace std;
#define Max 50
struct Node
{
  int Data;
  Node *left;
  Node *right;
};
int End[Max];
int Mid[Max];
int Top;

void CreatTree(Node *&p,int Len,int EndRight,int MidLeft,int MidRight)
{
	if(Len<=0)
	{	
		p=NULL;
		return;
	}
    p=new Node;
	p->Data=End[EndRight];   
    int LeftLen,RightLen;
    int i=MidLeft;
    while(Mid[i]!=End[EndRight])
    i++;
	LeftLen=i-MidLeft;
	RightLen=MidRight-i;
	CreatTree(p->left,LeftLen,EndRight-RightLen-1,MidLeft,i-1);   
	CreatTree(p->right,RightLen,EndRight-1,i+1,MidRight);
}

void Step( Node *p)
{   
    queue<Node *> Q;
    Q.push(p);
    while(!Q.empty())
    {
        Node *one;
        one=	Q.front();
	}	
}
int main()
{    
    Node *Tree;
    Tree=NULL;
	freopen("1.txt","r",stdin);
    cin>>Top;
    for(int i=0;i<Top;i++)
    cin>>End[i];
    for(  i=0;i<Top;i++)
    cin>>Mid[i];   
    CreatTree(Tree,Top,Top-1,0,Top-1);
    

    
    return 0; 
} 


猜你喜欢

转载自blog.csdn.net/qq_34125999/article/details/51818755