首页 > 其他分享 >317输出完全二叉树的某一层

317输出完全二叉树的某一层

时间:2023-12-23 12:11:39浏览次数:32  
标签:输出 int pow 317 depth 二叉树 节点

题目:输出完全二叉树的某一层

问题描述

对一棵完全二叉树,输出某一深度的所有节点,有则输出这些节点,无则输出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
41行怎么来的:完全二叉树深度为d的一行,第一个结点序号为pow(2,d-1),最后一个为pow(2,d)-1

47行:多的这个else是考虑了最后一行不满的情况

标签:输出,int,pow,317,depth,二叉树,节点
From: https://www.cnblogs.com/xzdmzrc221202/p/17922846.html

相关文章

  • 316完全二叉树的公共父结点
    题目:完全二叉树的公共父结点问题描述有一棵无限大的完全二叉树,该二叉树自上而下、自左而右从1开始编号。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从5到根结点的路径是(5,2,1),从4到根结点的路径是(4,2,1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1......
  • 315二叉树扩展先序遍历转中序遍历
    题目:二叉树扩展先序遍历转中序遍历问题描述编一个程序,读入用户输入的一串扩展先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的扩展先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出......
  • 314完全二叉树的子树
    题目:完全二叉树的子树问题描述对一棵完全二叉树,采用自上而下、自左往右的方式从1开始编号,我们已知这个二叉树的最后一个结点是n,现在的问题是结点m所在的子树一共包括多少个结点?输入格式       输入数据包括多行,每行给出一组测试数据,包括两个整数m,n(1<=m<=n<=10......
  • string 的输出
    血和泪的教训当我需要从txt文件中读取信息并且创建一个顶点为string,存储顶点信息也为string的图时,vscode终端输出乱码于是怀疑txt的编码问题,将其改成了utf-8还是不行折腾源文件编码于是开启了一段无脑改编码之路+换变了IDLE最后的最后突然看到贴心的vs2019提示,string类型的字符......
  • 输入一行字符,统计其中大写字母的个数,并将所有的大写字母转化成小写字母后输出
    #include<stdio.h>intmain(){ charscan[256]; printf("请输入一串字符(6个)\n"); scanf("%s",scan); intcount=0; inti=0; for(i=0;i<6;i++) { if(scan[i]>=65&&scan[i]<=90) { scan[i]+=32; ......
  • 23_合并二叉树
    617.合并二叉树给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为null的节点将......
  • 199. 二叉树的右视图(中)
    目录题目题解:BFS题目给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。题解:BFS用BFS,每一层最后一个弹出队列的元素加到结果列表里面classSolution:defrightSideView(self,root:Optional[TreeNode])->Lis......
  • 107. 二叉树的层序遍历 II(中)
    目录题目题解:BFS题目给你二叉树的根节点root,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)题解:BFS用BFS把每层的结点存在一个单独的列表里,最后翻转整个结果列表classSolution:deflevelOrderBottom(self,root:Op......
  • 103. 二叉树的锯齿形层序遍历(中)
    目录题目题解:BFS题目给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。题解:BFS用BFS把每一层的结点存在一个列表里面,然后判断一下如果是偶数层就翻转列表,最后都加入结果列表返回即可classSo......
  • bat批处理, 输出空行
    前言全局说明一、空行输出到tmp.txtecho=>>tmp.txt二、屏幕输出空行echo.注意:echo和.之间没有空格三、四、免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源:https://blog.csdn.net/m0_56208280/article/details/12......