將一系列給定數字順序插入一個初始為空的二叉搜索樹(定義為左子樹鍵值大,右子樹鍵值小),你需要判斷最后的樹是否一棵完全二叉樹,並且給出其層序遍歷的結果。
輸入格式:
輸入第一行給出一個不超過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"); }