zoukankan      html  css  js  c++  java
  • 进阶实验4-3.3 完全二叉搜索树 (30分)->排序得出搜索树中序遍历->已知搜索树中序求层序

    一个无重复的非负整数序列,必定对应唯一的一棵形状为完全二叉树的二叉搜索树。本题就要求你输出这棵树的层序遍历序列。

    输入格式:

    首先第一行给出一个正整数 N(≤),随后第二行给出 N 个不重复的非负整数。数字间以空格分隔,所有数字不超过 2000。

    输出格式:

    在一行中输出这棵树的层序遍历序列。数字间以 1 个空格分隔,行首尾不得有多余空格。

    输入样例:

    10
    1 2 3 4 5 6 7 8 9 0
    
     

    输出样例:

    6 3 8 1 5 7 9 0 2 4
    题目==已知搜索树中序遍历求层序遍历
    #include<bits/stdc++.h>
    using namespace std;
    int mp[1005],a[1005],cnt,n;
    void dfs(int x)
    {
        if(x>n)return ;
        dfs(x*2);
        a[x]=++cnt;//该行的位置变换 也可以由先序后序推出层序
        //x表示层序遍历时第x个出现
        //cnt 表示中序遍历时的下标
        dfs(2*x+1);
    }
    int main()
    {
        int i;cin>>n;
        for(i=1;i<=n;i++)cin>>mp[i];
        sort(mp+1,mp+1+n);
        dfs(1);
        for(i=1;i<=n;i++){
            if(i!=1)cout<<" ";
            cout<<mp[a[i]];
        }
    }
    中序(先序后序也可)推层序

    上面dfs记录的是中序遍历时的该数 在层序遍历时出现的下标;cnt不断累加表示中序遍历,x表示层序遍历时的下标
    下面层序推中序的dfs就直接根据层序的下标,搜出中序遍历时的顺序 然后直接按序输出
    
    
    #include<bits/stdc++.h>
    using namespace std;
    int n,mp[1005];
    void dfs(int x)
    {
        if(x>n)return;
        dfs(x*2);
        printf("%d ",mp[x]);
        dfs(x*2+1);
        return;
    }
    int main()
    {
        int i;cin>>n;
        for(i=1;i<=n;i++)cin>>mp[i];
        dfs(1);
        return 0;
    }
    层序推中序(完全二叉树情况下
  • 相关阅读:
    “automation服务器不能创建对象”的问题的解决方案大全
    转载区分C#中的Abstract函数和Virtual函数
    DOS批处理
    数据库设计范式
    java 内存查看工具
    Java内存溢出详解
    Struts2 循环编辑指定次数
    Selenium 使用
    spring security 获取当前用户信息
    由MyEclipse内存不足谈谈JVM内存
  • 原文地址:https://www.cnblogs.com/ydw--/p/12582230.html
Copyright © 2011-2022 走看看