PAT Grade A-1020 Tree Traversals (25 points)

Title: 1020 Tree Traversals (25 points)
Analysis : For the middle order and post order of the binary tree, the output layer order can be traversed after the binary tree is built. Pay attention to the left and right subtree boundaries when the tree is recursively built.
#include <iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<stack>
#include<algorithm>
#include<map>
#include<set>
#define MAX 99999999

typedef long long ll;
using namespace std;

int n,m;
typedef struct node{
    
    
    int data;
    struct node* left;
    struct node* right;
};
int in[31],pos[31];
node* create(node* root,int inl,int inr,int posl,int posr)
{
    
    
    if(inl >= inr)
        return NULL;
    int key = pos[posr - 1];
    if(root == NULL)
        root = (node*)malloc(sizeof(node));
    root->data = pos[posr - 1];
    root->left = NULL;
    root->right = NULL;
    int k = 0;
    for(int i = 0;i<inr;i++)
    {
    
    
        if(in[i] == key)
        {
    
    
            k = i;
            break;
        }
    }
    int num = k - inl;
    root->left = create(root->left,inl,k,posl,posl+num);
    root->right = create(root->right,k+1,inr,posl+num,posr-1);
    return root;
}
int main()
{
    
    
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for(int i = 0;i<n;i++)
        cin>>pos[i];
    for(int i = 0;i<n;i++)
        cin>>in[i];
    node* root = (node*)malloc(sizeof(node));
    root = create(root,0,n,0,n);
    queue<node*>q;
    q.push(root);
    int ll = 0;
    while(!q.empty())
    {
    
    
        node* x = q.front();
        q.pop();
        if(ll == 0){
    
    
            ll = 1;cout<<x->data;
        }
        else
            cout<<" "<<x->data;
        if(x->left != NULL)
            q.push(x->left);
        if(x->right != NULL)
            q.push(x->right);
    }
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_43567222/article/details/112807545