树的遍历

来源:互联网 发布:微信助力软件 编辑:程序博客网 时间:2024/06/05 22:52
/*由后序遍历与中序遍历求层次遍历*/#include <iostream>#include <vector>#include <cstdlib>#include <list>using namespace std;int n;vector<int> postOrder;vector<int> inOrder;int cur;typedef struct TNode *Tree;struct TNode{    Tree lchild;    Tree rchild;    int num;};int findRootIndex(int root){    for (int i = 0; i < n; i++)    {        if (inOrder[i] == root)            return i;    }    return -1;}Tree createTree(int left, int right){    if (left > right)        return NULL;    int root = postOrder[cur--];    int rootIndex = findRootIndex(root);    Tree T = new TNode;    T->num = root;    if (left == right)    {        T->lchild = NULL;        T->rchild = NULL;    }    else    {        T->rchild = createTree(rootIndex + 1, right);        T->lchild = createTree(left, rootIndex - 1);    }    return T;}void BFS(Tree T){    list<Tree> queue;    queue.push_back(T);    vector<int> p;    while (!queue.empty())    {        Tree T = queue.front();        queue.pop_front();        p.push_back(T->num);        if(T->lchild!=NULL)            queue.push_back(T->lchild);        if(T->rchild!=NULL)            queue.push_back(T->rchild);    }    for (int i = 0; i < p.size() - 1; i++)    {        cout << p[i] << ' ';    }    cout << p[p.size() - 1] << endl;}int main(){    cin >> n;    cur = n - 1;    int temp;    for (int i = 0; i < n; i++)    {        cin >> temp;        postOrder.push_back(temp);    }    for (int i = 0; i < n; i++)    {        cin >> temp;        inOrder.push_back(temp);    }    Tree T = createTree(0, cur);    BFS(T);    system("pause");    return 0;}
0 0
原创粉丝点击