PAT--1020 Tree Traversals(二叉树的建立与遍历)

题意:根据后序遍历和中序遍历建立二叉树,输出二叉树的层次遍历

#include <iostream>
#include <queue>

using namespace std;

int postOrder[31];
int inOrder[31];

struct Node
{
    int num;
    struct Node *lchild, *rchild;
};

Node *build(int l1, int r1, int l2, int r2)
{
    Node *root = (Node*)malloc(sizeof(Node));
    root->lchild = root->rchild = NULL;
    root->num = postOrder[r1];
    int i;
    for(i = l2; i <= r2; i++)
        if(inOrder[i] == root->num)
            break;
    if(i != l2)   //左子树不为空
        root->lchild = build(l1, l1+i-l2-1, l2, i-1);
    if(i != r2)   //右子树不为空
        root->rchild = build(l1+i-l2, r1-1, i+1, r2);

    return root;
}

void leOrder(Node *root)
{
    queue<Node*> q;
    q.push(root);
    while(!q.empty())
    {
        Node *tmp = q.front();
        q.pop();
        if(tmp == root)
            cout << tmp->num;
        else
            cout << " " << tmp->num;
        if(tmp->lchild)
            q.push(tmp->lchild);
        if(tmp->rchild)
            q.push(tmp->rchild);
    }
    cout << endl;
}

int main()
{
    int n;
    while(cin >> n)
    {
        for(int i = 0; i < n; i++)
            cin >> postOrder[i];
        for(int i = 0; i < n; i++)
            cin >> inOrder[i];
        Node *root = build(0, n-1, 0, n-1);
        leOrder(root);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/mch2869253130/article/details/88089808
今日推荐