码迷,mamicode.com
首页 > 其他好文 > 详细

扩展二叉树

时间:2019-07-28 19:58:18      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:turn   char   child   nbsp   ace   struct   code   数组   typedef   

【问题描述】

由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。 现给出扩展二叉树的先序序列,要求输出其中序和后序序列。

【输入样例】

tree_b.in ABD..EF..G..C..

【输出样例】

tree_b.out DBFEGAC DFGEBCA

技术图片


 

【方法一】数组模拟

技术图片

技术图片

【方法二】指针

 1 #include <iostream>
 2 #include <stdlib.h>
 3 #include <string>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <cstdio>
 7 using namespace std;
 8 
 9 typedef struct node;
10 typedef node *tree;
11 struct node
12 {
13     char data;
14     tree lchild, rchild;
15 };
16 tree bt;
17 
18 int i;
19 string s;
20 
21 void build(tree &bt)  //建树
22 {
23     if(s[++i]!=.)
24     {
25         bt = new node; 
26         bt = new node; 
27         bt->data = s[i];
28         build(bt->lchild);  
29         build(bt->rchild);  
30     }
31     else bt = NULL;
32 }
33 void printzx(tree bt)  //输出中序序列 
34 {
35     if(bt)
36     {
37         printzx(bt->lchild);
38         cout << bt->data;
39         printzx(bt->rchild);
40     }
41 }
42 void printhx(tree bt)  //输出后序序列 
43 {
44     if(bt)
45     {
46         printhx(bt->lchild);
47         printhx(bt->rchild);
48         cout << bt->data;
49     }
50 }
51 int main()
52 {
53     cin >> s;
54     i = -1;
55     build(bt);
56     printzx(bt);
57     cout << endl;
58     printhx(bt);
59     cout << endl;
60     return 0;
61 }

 

扩展二叉树

标签:turn   char   child   nbsp   ace   struct   code   数组   typedef   

原文地址:https://www.cnblogs.com/ljy-endl/p/11260494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!