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

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

    输入格式:

    输入第一行给出一个不超过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
    

    题意

    给你n个树,要求你建1个二叉搜索树,输出层序遍历,再输出是否是完全二叉搜索树

    题解

    1.建二叉搜索树,递归,如果指针==NULL,新建节点即可

    2.输出层序遍历,队列,先左后右,如果指针!=NULL,加入队列

    3.输出是否完全二叉搜索树,首先,完全二叉树满足,每个节点的编号不大于总个数n

    代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,a,flag=1;
     4 struct Node
     5 {
     6     int data;
     7     Node *Left,*Right;
     8     Node():data(0),Left(NULL),Right(NULL){}
     9 };
    10 Node *root;
    11 int build(int mem,Node *u)
    12 {
    13     if(u->data==0)
    14     {
    15         u->data=a;
    16         if(mem>n)
    17             flag=0;
    18         return 0;
    19     }
    20     else
    21     {
    22         if(a>u->data)
    23         {
    24             if(u->Left==NULL)
    25                 u->Left=new Node();
    26             build(mem*2,u->Left);
    27         }
    28         else
    29         {
    30             if(u->Right==NULL)
    31                 u->Right=new Node();
    32             build(mem*2+1,u->Right);
    33         }
    34     }
    35 }
    36 void Level()
    37 {
    38     int k=0;
    39     queue<Node*> qu;
    40     qu.push(root);
    41     while(!qu.empty())
    42     {
    43         Node *u=qu.front();qu.pop();
    44         if(k++)printf(" ");
    45         printf("%d",u->data);
    46         if(u->Left!=NULL)qu.push(u->Left);
    47         if(u->Right!=NULL)qu.push(u->Right);
    48     }
    49     printf("
    %s
    ",flag?"YES":"NO");
    50 }
    51 int main()
    52 {
    53     scanf("%d",&n);
    54     root=new Node();
    55     for(int i=0;i<n;i++)
    56     {
    57         scanf("%d",&a);
    58         build(1,root);
    59     }
    60     Level();
    61     return 0;
    62 }
  • 相关阅读:
    ACE_TASK学习
    tomcat:8005端口启动失败的解决办法
    centos7下安装jdk8
    解决github下载慢的一种方法
    page
    数据库
    做jar
    mvc:annotation-driven
    web.xml
    jsp九大内置对象el11内置对象
  • 原文地址:https://www.cnblogs.com/taozi1115402474/p/8485803.html
Copyright © 2011-2022 走看看