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
  • 相关阅读:
    什么是DI
    什么是IOC?
    什么是spring框架?spring框架到底有什么用?spring框架到底做了些什么?
    JSP中动态include和静态include的区别?
    jsp静态include和动态include区别
    Request对象的主要方法有哪些?
    如何防止重复提交
    JSTL 标签大全详解
    序列化对象为xml字符串
    ASP.NET获取客户端的相关信息
  • 原文地址:https://www.cnblogs.com/ydw--/p/12580251.html
Copyright © 2011-2022 走看看