【数据结构】二叉树,以前序序列输入

前端之家收集整理的这篇文章主要介绍了【数据结构】二叉树,以前序序列输入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. /*
  2. 实验5:建立一棵二叉树,以前序序列输入,以非空格字符表示结点的值,
  3. 以空格字符表示空指针;实现该二叉树的前序遍历、中序遍历和后序遍历。
  4. */
  5. #include<stdio.h>
  6. #include<stdlib.h>
  7.  
  8. #define OK 1;
  9.  
  10. typedef char TElemType;
  11. typedef int Status;
  12. //二叉树的存储表示方式
  13. typedef struct BiTNode{
  14. TElemType data;
  15. struct BiTNode *lchild,*rchild;//左右孩子指针
  16. }BiTNode,*BiTree;
  17.  
  18. //创建二叉树,使用前序序列输入数据,空格表示空树
  19.  
  20.  
  21. Status CreateBiTree(BiTree &T){
  22. char ch ;
  23. scanf("%c",&ch);
  24. getchar();
  25. if(ch == ' ')
  26. T = NULL;
  27. else{
  28. if(!(T = (BiTNode *)malloc(sizeof(BiTNode))))
  29. exit(0);
  30. T->data = ch; //生成根节点
  31. CreateBiTree(T->lchild); //构造左子树
  32. CreateBiTree(T->rchild); //构造右子树
  33. }
  34. return OK;
  35. }
  36.  
  37. //前序遍历
  38. Status PreOrderTraverse(BiTree T){
  39. if(T){
  40. printf("%c",T->data);
  41. PreOrderTraverse(T->lchild);
  42. PreOrderTraverse(T->rchild);
  43. }
  44. return OK;
  45. }
  46. //中序遍历
  47. Status InOrderTraverse(BiTree T){
  48. if(T){
  49. InOrderTraverse(T->lchild);
  50. printf("%c",T->data);
  51. InOrderTraverse(T->rchild);
  52. }
  53. return OK;
  54. }
  55. //后序遍历
  56. Status PostOrderTraverse(BiTree T){
  57. if(T){
  58. PostOrderTraverse(T->lchild);
  59. PostOrderTraverse(T->rchild);
  60. printf("%c",T->data);
  61. }
  62. return OK;
  63. }
  64.  
  65.  
  66. //主函数
  67. void main(){
  68. BiTree T;
  69. printf("请按照先序序列输入你的二叉树,空格表示空树\n");
  70. CreateBiTree(T);
  71. printf("前序遍历如下:\n");
  72. PreOrderTraverse(T);
  73. printf("\n");
  74. printf("中序遍历如下:\n");
  75. InOrderTraverse(T);
  76. printf("\n");
  77. printf("后序遍历如下:\n");
  78. PostOrderTraverse(T);
  79. printf("\n");
  80. }



By Mr.Z

猜你在找的数据结构相关文章