[C++] 构造二叉树 (中序 前序) →→→→→进入此内容的聊天室

来自 , 2020-12-07, 写在 C++, 查看 98 次.
URL http://www.code666.cn/view/ab731488
  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #include<string.h>
  4. void exit(int);
  5. #define MAX 100
  6. typedef struct node {
  7.     char d;
  8.     struct node *lchild, *rchild;
  9. } Tnode;
  10.  
  11. void MK(char in[], char is, char ie, char pre[], char pres, char pree, Tnode **r) {
  12.     int i;
  13.     if(is > ie || pres > pree)
  14.         *r = NULL;
  15.     else {
  16.         *r = malloc(sizeof(Tnode));
  17.         (*r)->d = pre[pres];
  18.         for(i = is; i <= ie; i++) {
  19.             if(in[i] == pre[pres]) {
  20.                 MK(in, is, i - 1, pre, pres + 1, pres + i - is, &(*r)->lchild);
  21.                 MK(in, i + 1, ie, pre, pres + i - is + 1, pree, &(*r)->rchild);
  22.                 break;
  23.             }
  24.             if(i > ie) {
  25.                 printf("输入错误!\n");
  26.                 exit(1);
  27.             }
  28.         }
  29.     }
  30. }
  31. void postorder(Tnode *r) {
  32.     if(r) {
  33.         postorder(r->lchild);
  34.         postorder(r->rchild);
  35.         printf("%c", r->d);
  36.     }
  37. }
  38. int leaf(Tnode *r) {
  39.     if(r == NULL)
  40.         return 0;
  41.     else if(r->lchild == NULL && r->rchild == NULL)
  42.         return 1;
  43.     else
  44.         return leaf(r->lchild) + leaf(r->rchild);
  45. }
  46. int height(Tnode *r) {
  47.     int h1, h2;
  48.     if(r == NULL)
  49.         return 0;
  50.     else {
  51.         h1 = height(r->lchild);
  52.         h2 = height(r->rchild);
  53.         return 1 + (h1 > h2 ? h1 : h2);
  54.     }
  55. }
  56. void main() {
  57.     Tnode *r = NULL;
  58.     char in[MAX], pre[MAX];
  59.     printf("请输入前序序列:\n");
  60.     gets(pre);
  61.     printf("请输入中序序列:\n");
  62.     gets(in);
  63.     MK(in, 0, strlen(in) - 1, pre, 0, strlen(pre) - 1, &r);
  64.     printf("\n后序遍历序列为:\n");
  65.     postorder(r);
  66.     printf("\n叶结点的个数为:%d\n", leaf(r));
  67.     printf("\n高度为:%d\n", height(r));
  68. }
  69.  
  70.  
  71.  
  72.  

回复 "构造二叉树 (中序 前序)"

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

captcha