[C++] 二叉树链表 →→→→→进入此内容的聊天室

来自 , 2020-05-04, 写在 C++, 查看 122 次.
URL http://www.code666.cn/view/4ba29b9f
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. //二叉树结点
  4. typedef struct Bitnode{
  5.         char data;
  6.         struct Bitnode *lchild,*rchild;
  7. }*Bitree;
  8. //链表结点
  9. typedef struct Node{
  10. char  data;
  11. int lchild;
  12. int rchild;
  13. }node;
  14. node  Array[100];
  15. static int length=0;
  16. const int MaxLength=100;
  17. //创建二叉树
  18. void CreateBitree(Bitree &t)
  19. {
  20.     char ch;
  21.     scanf("%c",&ch);
  22.         if(ch=='#')
  23.                 t=NULL;
  24.         else
  25.         {
  26.                 t=(Bitnode *)malloc(sizeof(Bitnode));
  27.                 t->data=ch;
  28.  
  29.                 CreateBitree(t->lchild);
  30.                 CreateBitree(t->rchild);
  31.         }
  32.  
  33. }
  34. //前序遍历
  35. void inordertraverse(Bitree t)
  36. {
  37.     if(t)
  38.     {
  39.         printf("%c",t->data);
  40.         length++;
  41.                 Array[length].data=t->data;
  42.         inordertraverse(t->lchild);
  43.         inordertraverse(t->rchild);
  44.     }
  45.  
  46. }
  47. //后序遍历
  48. void postordertraverse(Bitree t)
  49. {
  50.     if(t)
  51.     {
  52.         inordertraverse(t->lchild);
  53.         inordertraverse(t->rchild);
  54.         printf("%c",t->data);
  55.     }
  56. }
  57. //层次遍历
  58. void Leveltaverse(Bitree t)
  59. {
  60.     Bitree Q[MaxLength];
  61.     int front=0,rear=0;
  62.     Bitree p;
  63.     if(t){
  64.     Q[rear]=t;
  65.     rear=(rear+1)%MaxLength;
  66. }
  67.    while(front!=rear){
  68.     p=Q[front];
  69.    front=(front+1)%MaxLength;
  70.    printf("%c",p->data);
  71.    if(p->lchild){
  72.    Q[rear]=p->lchild;
  73.    rear=(rear+1)%MaxLength;
  74. }
  75.    if(p->rchild){
  76.    Q[rear]=p->rchild;
  77.    rear=(rear+1)%MaxLength;
  78. }
  79. }
  80.  
  81. }
  82. //二叉树链表
  83.  void Bitreelist(Bitree t)
  84. {
  85.         int i,j;
  86.         if(t)
  87.         {
  88.                 j=1;
  89.         while(t->data!=Array[j].data)
  90.                         j++;
  91.                 if(t->lchild!=NULL)
  92.                 {
  93.                         i=1;
  94.                         while(t->lchild->data!=Array[i].data)
  95.                                 i++;
  96.             Array[j].lchild=i;
  97.                 }
  98.                 else
  99.                         Array[j].lchild=0;
  100.                 if(t->rchild!=NULL)
  101.                 {
  102.                         i=1;
  103.                         while(t->rchild->data!=Array[i].data)
  104.                                 i++;
  105.             Array[j].rchild=i;
  106.                 }
  107.                 else
  108.                         Array[j].rchild=0;
  109.                 Bitreelist(t->lchild);
  110.                 Bitreelist(t->rchild);
  111.         }
  112. }
  113.  
  114. int main()
  115. {
  116.         Bitree t1;
  117.         printf("请输入二叉树结点值:");
  118.         CreateBitree(t1);
  119.         printf("\n");
  120.         printf("二叉树先序遍历:");
  121.         inordertraverse(t1);
  122.         printf("\n");
  123.         printf("二叉树后序遍历:");
  124.         postordertraverse(t1);
  125.         printf("\n");
  126.         printf("二叉树层次遍历:");
  127.         Leveltaverse(t1);
  128.         printf("\n");
  129.         printf("\n");
  130.         Bitreelist(t1);
  131.         printf("二叉树的静态二叉链表为:\n");
  132.         printf("下标\tlchil\tdata\trchild\n");
  133.         for(int j=1;j<=length;j++)
  134.          {
  135.       printf("%d\t%d\t%c\t%d\n", j,Array[j].lchild, Array[j].data, Array[j].rchild);
  136.          }
  137.  
  138.     return 0;
  139. }
  140. //ABD##E##CFH###G##
  141.  

回复 "二叉树链表"

这儿你可以回复上面这条便签

captcha