题目:输出完全二叉树的某一层
问题描述
对一棵完全二叉树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。
输入格式
输入有多组数据。
每组数据第一行输入一个结点数n(1<=n<=1000),第二行将树中的这n个节点依次输入(每个结点存储的数据是一个数字),n个结点编号方式是层间从上到下、层内从左到右依次编号;第三行输入一个d代表深度。
当n=0时,表示输入结束。
输出格式
每组数据在一行上输出该树中第d层的所有节点,节点间用空格隔开。每组数据输出完成后要换行。
样例输入
4
1 2 3 4
2
0
样例输出
2 3
样例说明
该完全二叉树的第一层是1,第二层是2 3,第三层是4;题目要求输出第二层,则输出2 3。
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int n; 6 int i,k; 7 int depth=1; 8 int number; 9 int tree[1003]={0}; 10 int d;//targeted_depth 11 12 while(1){ 13 scanf("%d",&n); 14 if(n==0) break; 15 16 while(1) 17 { 18 if((int)pow(2,depth)>n) break; 19 else depth++; 20 21 } 22 //depth=[log2(n)]+1; 23 //printf("%d",depth); 24 //debugged 这个深度,当时大半夜debug弄得要死要活的,困困 25 26 27 for(k=1;k<=n;k++) 28 { 29 int number; 30 scanf("%d",&number); 31 tree[k]=number; 32 } 33 34 scanf("%d",&d); 35 if(d>depth||d<1) 36 { 37 printf("EMPTY\n"); 38 } 39 else if(d<depth) 40 { 41 for(i=(int)pow(2,d-1);i<=(int)pow(2,d)-1;i++)//手算的结果 42 { 43 printf("%d ",tree[i]); 44 } 45 printf("\n"); 46 } 47 else if(d==depth) 48 { 49 for(i=(int)pow(2,d-1);i<=n;i++) 50 { 51 printf("%d ",tree[i]); 52 } 53 printf("\n"); 54 } 55 } 56 return 0; 57 58 }
函数pow返回的是double需要强制转化为int标签:输出,int,pow,317,depth,二叉树,节点 From: https://www.cnblogs.com/xzdmzrc221202/p/17922846.html
41行怎么来的:完全二叉树深度为d的一行,第一个结点序号为pow(2,d-1),最后一个为pow(2,d)-1
47行:多的这个else是考虑了最后一行不满的情况