当前位置:   article > 正文

二叉树的遍历_7-1 二叉树的遍历 分数 100 作者 高天 单位 临沂大学 满二叉树是一种特殊的二叉树

7-1 二叉树的遍历 分数 100 作者 高天 单位 临沂大学 满二叉树是一种特殊的二叉树

满二叉树是一种特殊的二叉树,它的每一层都是满的,也就是说每个节点都有两个子节点(除了最后一层)。设满二叉树的深度为d,则它总共有2d−1个节点

      现在给你一棵满二叉树的中序遍历,求出其层序遍历,按树形输出。

输入格式:

输入的第一行给出一个整数d——表示树的深度。

输入的第二行给出2d−1个整数——表示节点的编号。

1≤d≤10

输出格式:

输出共d行,表示该满二叉树的结构以及节点编号位置。

输入样例:

  1. 3
  2. 1 6 4 3 5 2 7

输出样例:

  1. 3
  2. 6 2
  3. 1 4 5 7

代码实现:

  1. #include<stdio.h>
  2. #include<math.h>
  3. void Traverse(int* tree,int sum)
  4. {
  5. int root=sum/2+1;
  6. int queue[sum];
  7. int head=0,tail=0;
  8. queue[tail++]=root;
  9. int cnt=0,num=1;
  10. int gap=root/2;
  11. while(head<tail)
  12. {
  13. int t=queue[head++];
  14. if(gap>0){
  15. int l=t-gap,r=t+gap;
  16. queue[tail++]=l;
  17. queue[tail++]=r;
  18. }
  19. printf("%d ",tree[t]);
  20. cnt++;
  21. if(cnt==num)
  22. {
  23. if(gap==0)break;
  24. num*=2;
  25. cnt=0;
  26. gap/=2;
  27. printf("\n");
  28. }
  29. }
  30. return;
  31. }
  32. int main()
  33. {
  34. int d;
  35. scanf("%d",&d);
  36. int sum=pow(2,d)-1;
  37. int tree[sum+1];
  38. for(int i=1;i<=sum;i++)
  39. {
  40. scanf("%d",&tree[i]);
  41. }
  42. Traverse(tree,sum);
  43. return 0;
  44. }

注意:

本题每一行末尾可以输出空格,但是最后一行不能换行。

此外,这个题目要首先分析中序遍历的数学规律。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/663519
推荐阅读
相关标签
  

闽ICP备14008679号