zoukankan      html  css  js  c++  java
  • L3-010 是否完全二叉搜索树 (30分)

    将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。

    输入格式:

    输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。

    输出格式:

    将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO

    输入样例1:

    9
    38 45 42 24 58 30 67 12 51
    
     

    输出样例1:

    38 45 24 58 42 30 12 67 51
    YES
    
     

    输入样例2:

    8
    38 24 12 45 58 67 42 51
    
     

    输出样例2:

    38 45 24 58 42 12 67 51
    NO



    注意是顺序插入--直接dfs给当前数找下标插入
    #include<bits/stdc++.h>
    using namespace std;
    int a[105];
    void dfs(int p,int x)
    {
        if(a[p]==-1){
            a[p]=x;
            return;
        }
        if(a[p]<x)dfs(p*2+1,x);//判断放左子树还是右子树
        else dfs(p*2+2,x);
    }
    int main(){
        int i,n;cin>>n;
        memset(a,-1,sizeof a);
        for(i=0;i<n;i++){
            int x;
            cin>>x;
            dfs(0,x);
        }
        for(i=0;i<n;i++)if(a[i]==-1)break;
        if(i!=n){
            int f=0;
            for(i=0;i<99;i++){
                if(f==1&&a[i]!=-1)cout<<" ";
                if(a[i]!=-1){
                    cout<<a[i];
                    f=1;
                }
            }
            cout<<"
    NO
    ";
        }
        else{
            int f=0;
            for(i=0;i<n;i++){
                if(f==1)cout<<" ";
                cout<<a[i];
                f=1;
            }
            cout<<"
    YES
    ";
        }
        return 0;
    }
    View Code
  • 相关阅读:
    RabbitMQ实战(文摘)
    dex2jar 和 jd-gui 的安装与使用(转)
    asp.net core跨平台开发从入门到实战文摘
    hashCode() 和equals() 区别和作用(转)
    B+树和LSM比较(转)
    C#并发集合(转)
    文档docsify
    如何熟悉一个系统?(内含知识大图)
    新浪微博应对弹性扩容的架构演进
    iftop非交互式监控流量来源和去向
  • 原文地址:https://www.cnblogs.com/ydw--/p/12580251.html
Copyright © 2011-2022 走看看