实验3:由遍历序列构造二叉树

二叉树构造定理:

  • 定理7.1:任何n(n>0)个不同结点的二又树,都可由它的中序序列和先序序列唯一地确定。
  • 定理7.2:任何n(n>0)个不同结点的二又树,都可由它的中序序列和后序序列唯一地确定。

题目: 已知先序序列为ABDGCEF,中序序列为DGBAECF,则构造二叉树的过程如下所示。

 树与二叉树 | 实验3:由遍历序列构造二叉树

 C语言代码示例:

 1 #include<stdio.h>
 2 #include<malloc.h>
 3  
 4 typedef struct node
 5 {
 6     struct node *lchild, *rchild;
 7     char data;
 8 } BTNode;
 9  
10 BTNode* CreateBTree(char *pre, char *in, int n)
11 {
12     int k;
13     char *p;
14     if (n <= 0)
15         return NULL;
16     BTNode *b = (BTNode*)malloc(sizeof(BTNode));
17     b->data = *pre;
18     for (p = in; p < in + n; ++p)
19         if (*p == *pre)
20             break;
21     k = p-in;
22     b->lchild = CreateBTree(pre+1, in, k);
23     b->rchild = CreateBTree(pre+k+1, p+1, n-k-1);
24     return b;
25 }
26  
27 void dispBTree(BTNode *b) 
28 {
29     if(b!= NULL)
30     {
31         printf("%c", b->data);
32         if(b->lchild != NULL || b->rchild != NULL)
33         {
34             printf("(");
35             dispBTree(b->lchild); 
36             if(b->rchild != NULL)
37               printf(",");
38             dispBTree(b->rchild);
39             printf(")");                 
40         }
41     }
42  } 
43  
44 int main()
45 {
46     BTNode* b;
47     char pre[] = "ABDGCEF";
48     char in[] = "DGBAECF";
49     int n = 7;
50     b = CreateBTree(pre, in, 7);
51     dispBTree(b);
52     return 0; 
53 }
View Code

相关文章:

  • 2021-05-10
  • 2022-12-23
  • 2021-11-30
  • 2021-06-23
  • 2022-02-09
  • 2022-12-23
  • 2022-01-17
  • 2022-03-01
猜你喜欢
  • 2021-07-19
  • 2021-08-19
  • 2022-12-23
  • 2022-12-23
  • 2021-06-06
  • 2021-10-11
  • 2021-10-27
相关资源
相似解决方案