当前位置:   article > 正文

二叉树的遍历 pta_二叉树的遍历pta

二叉树的遍历pta

 

函数接口定义:

  1. void InorderTraversal( BinTree BT );
  2. void PreorderTraversal( BinTree BT );
  3. void PostorderTraversal( BinTree BT );
  4. void LevelorderTraversal( BinTree BT );

其中BinTree结构定义如下:

  1. typedef struct TNode *Position;
  2. typedef Position BinTree;
  3. struct TNode{
  4. ElementType Data;
  5. BinTree Left;
  6. BinTree Right;
  7. };

要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。

裁判测试程序样例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef char ElementType;
  4. typedef struct TNode *Position;
  5. typedef Position BinTree;
  6. struct TNode{
  7. ElementType Data;
  8. BinTree Left;
  9. BinTree Right;
  10. };
  11. BinTree CreatBinTree(); /* 实现细节忽略 */
  12. void InorderTraversal( BinTree BT );
  13. void PreorderTraversal( BinTree BT );
  14. void PostorderTraversal( BinTree BT );
  15. void LevelorderTraversal( BinTree BT );
  16. int main()
  17. {
  18. BinTree BT = CreatBinTree();
  19. printf("Inorder:"); InorderTraversal(BT); printf("\n");
  20. printf("Preorder:"); PreorderTraversal(BT); printf("\n");
  21. printf("Postorder:"); PostorderTraversal(BT); printf("\n");
  22. printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");
  23. return 0;
  24. }
  25. /* 你的代码将被嵌在这里 */

输出样例(对于图中给出的树):

  1. Inorder: D B E F A G H C I
  2. Preorder: A B D F E C G H I
  3. Postorder: D E F B H G I C A
  4. Levelorder: A B C D F G I E H

前序、中序及后序使用的方法都一样,知识输出的位置不一样。其实就是在第几次遍历时输出节点(每个节点被访问的次数都为三次)。层序遍历,可以用队列的方法求解,但在函数题中,一般不会再创建一个结构体,只用把队列的思想用数组表达即可。 

  1. void InorderTraversal( BinTree BT ){
  2. if(BT){
  3. InorderTraversal(BT->Left);
  4. printf(" %c",BT->Data);
  5. InorderTraversal(BT->Right);
  6. }
  7. }
  8. void PreorderTraversal( BinTree BT ){
  9. if(BT){
  10. printf(" %c",BT->Data);
  11. PreorderTraversal(BT->Left);
  12. PreorderTraversal(BT->Right);
  13. }
  14. }
  15. void PostorderTraversal( BinTree BT ){
  16. if(BT){
  17. PostorderTraversal(BT->Left);
  18. PostorderTraversal(BT->Right);
  19. printf(" %c",BT->Data);
  20. }
  21. }
  22. void LevelorderTraversal( BinTree BT ){
  23. BinTree a[101];
  24. int i=0,j=0;
  25. a[0] = BT;
  26. while(BT){
  27. if(BT->Left!=NULL){
  28. a[++i] = BT->Left;
  29. }
  30. if(BT->Right!=NULL){
  31. a[++i] = BT->Right;
  32. }
  33. BinTree temp = a[j];
  34. printf(" %c",temp->Data);
  35. if(i==j){
  36. break;
  37. }
  38. j++;
  39. BT = a[j];
  40. }
  41. }

 

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

闽ICP备14008679号