PAT-A1020: Tree Traversal(이차 트리 재구성 및 그 중간, 뒷면 반복)

제목 전송문:https://pintia.cn/problem-sets/994805342720868352/problems/994805485033603072
카탈로그
제목 설명:
문제 해결 방법:
ac 코드:

제목 설명:


두 갈래 나무 (binary tree) 의 뒷차례 (postorder) 역과 중간 차례 (inorder) 역행을 보여 줍니다. 이 두 갈래 나무를 재건하고 이 두 갈래 나무의 층차 역행 서열을 출력해 주십시오.
 

문제 해결 방법:


P297, 재구성 후 출력하면 됩니다.create와 bfs 함수를 호출하여 코드를 명확하게 하고 출력 형식에 주의하십시오.
 

ac 코드:

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
struct node{
    int data;
    node* lchild;
    node* rchild;
};
int pre[50],in[50],post[50];// , , 
int n;// 
node* create(int postl,int postr,int inl,int inr)
{
    int k;
    if(postl>postr)
        return NULL;
    node* root=new node;
    root->data=post[postr];
    for(k=inl;k<=inr;k++)
        if(in[k]==post[postr])
            break;
    int numleft=k-inl;
    root->lchild=create(postl,postl+numleft-1,inl,k-1);// 
    root->rchild=create(postl+numleft,postr-1,k+1,inr);// 
    return root;

}
void bfs(node* root)
{
    int num=0;
    queue q;
    q.push(root);
    while(!q.empty())
    {
        node* now=q.front();
        q.pop();
        printf("%d",now->data);
        num++;
        if(numlchild!=NULL) q.push(now->lchild);
        if(now->rchild!=NULL) q.push(now->rchild);
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i

좋은 웹페이지 즐겨찾기