zoukankan      html  css  js  c++  java
  • PTA----7-3树的遍历

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

    输入格式:
    输入第一行给出一个正整数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

    假设树的根节点编号为n,则左孩子编号为2n,右孩子编号为2n+1,如果知道这个的话,就很好写了。
    我们可以把一棵树按照这个层次的编号写入一个数组里面,节点的编号就是它的下标。
    本来想着还要做个bfs呢,但是实际上这个编号本身就是层次的序列,不需要。
    dfs边界就是,空节点就写-1,不输出。
    后序序列的最后一个就是根节点,用它找到中序里的根位置,中序的左边就是它的左子树,中序的右边就是右子树。
    num[p]=root,我们把根节点写入之后,再搜索它的左子树,然后搜索右子树,左子树把左子树的根写入数组,右子树把右子树的根写入数组,实际上这就完成dfs了。
    自己手演,模拟一下,数据量不大。

    #include <cstdio>
    #include <cstring>
    const int maxn = 100000;
    int num[maxn],in[35],post[35];
    int cnt = 0;
    
    void Preorder(int *post,int *in,int len,int p)
    {
        if (len<1) {
            num[p] = -1;
            return;
        }
        int i = 0;
        while (post[len-1]!=in[i])
            i++;
        num[p] = post[len-1];
        Preorder(post, in, i, 2 * p);
        Preorder(post + i, in + i + 1, len - 1 - i, 2 * p + 1);
    }
    
    int main()
    {
        int n;
        scanf("%d", &n);
        memset(num, -1, sizeof(num));
        for (int i = 0; i < n;i++) {
            scanf("%d", &post[i]);
        }
        for (int i = 0; i < n;i++)
            scanf("%d", &in[i]);
        Preorder(post, in, n, 1);
        int i;
        for (i = 0; i < maxn;i++) {
            if (num[i]!=-1) {
                printf("%d ", num[i]);
                cnt++;
            }
            if (cnt==n-1)
                break;
        }
        for (i = i + 1; i < maxn;i++) {
            if (num[i]!=-1) {
                printf("%d
    ", num[i]);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    导入Spreadsheet到sharepoint2013报错
    WinRM不起作用 Connecting to remote server failed with the following error message : WinRM cannot complete the operation
    安装workflowmanager 1.0 server
    SharePoint 2013 pre-config
    SharePoint 错误集 3
    如何安装/卸载workflow manager 1.0
    IOS 7 Study
    IOS 7 Study
    MVC interview questions with answers
    Android 获取控件相对于屏幕位置
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/12328900.html
Copyright © 2011-2022 走看看