三木社区

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

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

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-9-1 09:18:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /* main6-6.c 检验bo6-6.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-6.h"
  14. #include"bo6-6.c"

  15. Status visitT(BiPTree T)
  16. {
  17.    if(T) /* T非空 */
  18. #ifdef CHAR
  19.      printf("%c是",T->data);
  20.    if(T->parent) /* T有双亲 */
  21.    {
  22.      printf("%c",T->parent->data);
  23. #endif
  24. #ifdef INT
  25.      printf("%d是",T->data);
  26.    if(T->parent) /* T有双亲 */
  27.    {
  28.      printf("%d",T->parent->data);
  29. #endif
  30.      if(T->parent->lchild==T)
  31.        printf("的左孩子\n");
  32.      else
  33.        printf("的右孩子\n");
  34.    }
  35.    else
  36.      printf("根结点\n");
  37.    return OK;
  38. }

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


回复

使用道具 举报

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

辽公网安备 21021702000620号

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

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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