7-2 是否完全二叉搜索樹(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


代碼:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[100],b;
int n;
void add(int i,int d)
{
    if(a[i] == -1)
    {
        a[i] = d;
        return;
    }
    if(d > a[i])add(i*2,d);
    else add(i*2+1,d);
}
int main()
{
    scanf("%d",&n);
    memset(a,-1,sizeof(a));
    for(int i = 0;i < n;i ++)
    {
        scanf("%d",&b);
        add(1,b);
    }
    int c = 0,i = 0;
    while(c < n)
    {
        while(a[i] == -1)i++;
        if(c)printf(" %d",a[i]);
        else printf("%d",a[i]);
        i ++;
        c ++;
    }
    if(i == n + 1)printf("\nYES");
    else printf("\nNO");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM