三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 386|回复: 0
打印 上一主题 下一主题

C语言数据结构-main6-2.c

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-9-1 09:16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /* main6-2.c 检验bo6-2.c的主程序,利用条件编译选择数据类型(另一种方法) */
  2. #define CHAR /* 字符型 */
  3. /* #define INT /* 整型(二者选一) */
  4. #include"c1.h"
  5. #ifdef CHAR
  6.    typedef char TElemType;
  7.    TElemType Nil=' '; /* 字符型以空格符为空 */
  8. #endif
  9. #ifdef INT
  10.    typedef int TElemType;
  11.    TElemType Nil=0; /* 整型以0为空 */
  12. #endif
  13. #include"c6-2.h"
  14. #include"bo6-2.c"

  15. Status visitT(TElemType e)
  16. {
  17. #ifdef CHAR
  18.    printf("%c ",e);
  19. #endif
  20. #ifdef INT
  21.    printf("%d ",e);
  22. #endif
  23.    return OK;
  24. }

  25. void main()
  26. {
  27.    int i;
  28.    BiTree T,p,c;
  29.    TElemType e1,e2;
  30.    InitBiTree(&T);
  31.    printf("构造空二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));
  32.    e1=Root(T);
  33.    if(e1!=Nil)
  34. #ifdef CHAR
  35.      printf("二叉树的根为: %c\n",e1);
  36. #endif
  37. #ifdef INT
  38.      printf("二叉树的根为: %d\n",e1);
  39. #endif
  40.    else
  41.      printf("树空,无根\n");
  42. #ifdef CHAR
  43.    printf("请先序输入二叉树(如:ab三个空格表示a为根结点,b为左子树的二叉树)\n");
  44. #endif
  45. #ifdef INT
  46.    printf("请先序输入二叉树(如:1 2 0 0 0表示1为根结点,2为左子树的二叉树)\n");
  47. #endif
  48.    CreateBiTree(&T);
  49.    printf("建立二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));
  50.    e1=Root(T);
  51.    if(e1!=Nil)
  52. #ifdef CHAR
  53.      printf("二叉树的根为: %c\n",e1);
  54. #endif
  55. #ifdef INT
  56.      printf("二叉树的根为: %d\n",e1);
  57. #endif
  58.    else
  59.      printf("树空,无根\n");
  60.    printf("中序递归遍历二叉树:\n");
  61.    InOrderTraverse(T,visitT);
  62.    printf("\n中序非递归遍历二叉树:\n");
  63.    InOrderTraverse1(T,visitT);
  64.    printf("中序非递归遍历二叉树(另一种方法):\n");
  65.    InOrderTraverse2(T,visitT);
  66.    printf("后序递归遍历二叉树:\n");
  67.    PostOrderTraverse(T,visitT);
  68.    printf("\n层序遍历二叉树:\n");
  69.    LevelOrderTraverse(T,visitT);
  70.    printf("请输入一个结点的值: ");
  71. #ifdef CHAR
  72.    scanf("%*c%c",&e1);
  73. #endif
  74. #ifdef INT
  75.    scanf("%d",&e1);
  76. #endif
  77.    p=Point(T,e1); /* p为e1的指针 */
  78. #ifdef CHAR
  79.    printf("结点的值为%c\n",Value(p));
  80. #endif
  81. #ifdef INT
  82.    printf("结点的值为%d\n",Value(p));
  83. #endif
  84.    printf("欲改变此结点的值,请输入新值: ");
  85. #ifdef CHAR
  86.    scanf("%*c%c%*c",&e2);
  87. #endif
  88. #ifdef INT
  89.    scanf("%d",&e2);
  90. #endif
  91.    Assign(p,e2);
  92.    printf("层序遍历二叉树:\n");
  93.    LevelOrderTraverse(T,visitT);
  94.    e1=Parent(T,e2);
  95.    if(e1!=Nil)
  96. #ifdef CHAR
  97.      printf("%c的双亲是%c\n",e2,e1);
  98. #endif
  99. #ifdef INT
  100.      printf("%d的双亲是%d\n",e2,e1);
  101. #endif
  102.    else
  103. #ifdef CHAR
  104.      printf("%c没有双亲\n",e2);
  105. #endif
  106. #ifdef INT
  107.      printf("%d没有双亲\n",e2);
  108. #endif
  109.    e1=LeftChild(T,e2);
  110.    if(e1!=Nil)
  111. #ifdef CHAR
  112.      printf("%c的左孩子是%c\n",e2,e1);
  113. #endif
  114. #ifdef INT
  115.      printf("%d的左孩子是%d\n",e2,e1);
  116. #endif
  117.    else
  118. #ifdef CHAR
  119.      printf("%c没有左孩子\n",e2);
  120. #endif
  121. #ifdef INT
  122.      printf("%d没有左孩子\n",e2);
  123. #endif
  124.    e1=RightChild(T,e2);
  125.    if(e1!=Nil)
  126. #ifdef CHAR
  127.      printf("%c的右孩子是%c\n",e2,e1);
  128. #endif
  129. #ifdef INT
  130.      printf("%d的右孩子是%d\n",e2,e1);
  131. #endif
  132.    else
  133. #ifdef CHAR
  134.      printf("%c没有右孩子\n",e2);
  135. #endif
  136. #ifdef INT
  137.      printf("%d没有右孩子\n",e2);
  138. #endif
  139.    e1=LeftSibling(T,e2);
  140.    if(e1!=Nil)
  141. #ifdef CHAR
  142.      printf("%c的左兄弟是%c\n",e2,e1);
  143. #endif
  144. #ifdef INT
  145.      printf("%d的左兄弟是%d\n",e2,e1);
  146. #endif
  147.    else
  148. #ifdef CHAR
  149.      printf("%c没有左兄弟\n",e2);
  150. #endif
  151. #ifdef INT
  152.      printf("%d没有左兄弟\n",e2);
  153. #endif
  154.    e1=RightSibling(T,e2);
  155.    if(e1!=Nil)
  156. #ifdef CHAR
  157.      printf("%c的右兄弟是%c\n",e2,e1);
  158. #endif
  159. #ifdef INT
  160.      printf("%d的右兄弟是%d\n",e2,e1);
  161. #endif
  162.    else
  163. #ifdef CHAR
  164.      printf("%c没有右兄弟\n",e2);
  165. #endif
  166. #ifdef INT
  167.      printf("%d没有右兄弟\n",e2);
  168. #endif
  169.    InitBiTree(&c);
  170.    printf("构造一个右子树为空的二叉树c:\n");
  171. #ifdef CHAR
  172.    printf("请先序输入二叉树(如:ab三个空格表示a为根结点,b为左子树的二叉树)\n");
  173. #endif
  174. #ifdef INT
  175.    printf("请先序输入二叉树(如:1 2 0 0 0表示1为根结点,2为左子树的二叉树)\n");
  176. #endif
  177.    CreateBiTree(&c);
  178.    printf("先序递归遍历二叉树c:\n");
  179.    PreOrderTraverse(c,visitT);
  180.    printf("\n树c插到树T中,请输入树T中树c的双亲结点 c为左(0)或右(1)子树: ");
  181. #ifdef CHAR
  182.    scanf("%*c%c%d",&e1,&i);
  183. #endif
  184. #ifdef INT
  185.    scanf("%d%d",&e1,&i);
  186. #endif
  187.    p=Point(T,e1); /* p是T中树c的双亲结点指针 */
  188.    InsertChild(p,i,c);
  189.    printf("先序递归遍历二叉树:\n");
  190.    PreOrderTraverse(T,visitT);
  191.    printf("\n删除子树,请输入待删除子树的双亲结点  左(0)或右(1)子树: ");
  192. #ifdef CHAR
  193.    scanf("%*c%c%d",&e1,&i);
  194. #endif
  195. #ifdef INT
  196.    scanf("%d%d",&e1,&i);
  197. #endif
  198.    p=Point(T,e1);
  199.    DeleteChild(p,i);
  200.    printf("先序递归遍历二叉树:\n");
  201.    PreOrderTraverse(T,visitT);
  202.    printf("\n");
  203.    DestroyBiTree(&T);
  204. }
复制代码


回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-5-12 00:23 , Processed in 0.023866 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表