1340:【例3-5】扩展二叉树

简介: 1340:【例3-5】扩展二叉树

1340:【例3-5】扩展二叉树

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

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

现给出扩展二叉树的先序序列,要求输出其中序和后序序列。

【输入】

扩展二叉树的先序序列。

【输出】

输出其中序和后序序列。

【输入样例】

ABD..EF..G..C..

【输出样例】

DBFEGAC

DFGEBCA

 

1. #include <iostream>
2. #include <cstdio>
3. #include <cstring>
4. #include <algorithm>
5. using namespace std;
6. struct node{
7.  char data;
8.  int left,right;
9. }t[1000];
10. int num=1;
11. void build(int root){
12.   char ch;
13.   cin>>ch;
14.   if(ch!='.'){
15.     t[root].data=ch;
16.     t[root].left=++num;
17.     build(t[root].left);
18.     t[root].right=++num;
19.     build(t[root].right);
20.   }
21. }
22. void inorder(int root){
23.   if(t[root].data==0) return;
24.   inorder(t[root].left);
25.   cout<<t[root].data;
26.   inorder(t[root].right);
27. }
28. void postorder(int root){
29.   if(t[root].data==0) return;
30.   postorder(t[root].left);
31.   postorder(t[root].right);
32.   cout<<t[root].data;
33. }
34. int main()
35. {
36.   build(1);
37.   inorder(1);
38.   cout<<endl;
39.   postorder(1);
40. return 0;
41. }


相关文章
|
算法 Java C++
27.【C/C++ 最全vector数组的用法 (详解)】(一)
27.【C/C++ 最全vector数组的用法 (详解)】
737 0
|
6月前
|
算法
104.二叉树的最大深度 , 111.二叉树的最小深度,222.完全二叉树的节点个数
本内容主要讲解了三道与二叉树相关的算法题及其解法,包括“二叉树的最大深度”、“二叉树的最小深度”和“完全二叉树的节点个数”。通过递归方法(前序或后序遍历)实现求解。 - **最大深度**:利用后序遍历计算根节点到最远叶子节点的路径长度。 - **最小深度**:同样采用后序遍历,但需特别处理单子树为空的情况,确保找到从根到最近叶子节点的路径。 - **完全二叉树节点数**:基于递归后序遍历统计左右子树节点数量并累加。 代码示例清晰展示了递归逻辑,帮助理解二叉树深度与高度的概念及其实现方式。
|
9月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
518 73
【数据结构】二叉树的三种遍历(非递归讲解)
【数据结构】二叉树的三种遍历(非递归讲解)
263 1
|
11月前
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
311 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
11月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
560 5
|
存储 C语言
C语言中a 和&a 有什么区别
在C语言中,&quot;a&quot; 是一个变量的名字,代表存储在内存中的某个值。而&quot;&a&quot; 则是获取该变量的内存地址,即变量a在计算机内存中的具体位置。这两者的主要区别在于:&quot;a&quot; 操作的是变量中的值,&quot;&a&quot; 操作的是变量的内存地址。
2049 23
|
存储 算法 C语言
C语言手撕实战代码_二叉排序树(二叉搜索树)_构建_删除_插入操作详解
这份二叉排序树习题集涵盖了二叉搜索树(BST)的基本操作,包括构建、查找、删除等核心功能。通过多个具体示例,如构建BST、查找节点所在层数、删除特定节点及查找小于某个关键字的所有节点等,帮助读者深入理解二叉排序树的工作原理与应用技巧。此外,还介绍了如何将一棵二叉树分解为两棵满足特定条件的BST,以及删除所有关键字小于指定值的节点等高级操作。每个题目均配有详细解释与代码实现,便于学习与实践。
503 3
给出一个数据序列,建立二叉排序树,并实现插入功能 对二叉排序树进行中序遍历,可以得到有序的数据序列
该文章通过C++代码示例讲解了如何根据输入数据序列构建二叉排序树,并实现插入功能,随后通过中序遍历输出有序的数据序列,展示了对二叉排序树进行操作和遍历的完整过程。
|
搜索推荐 算法 索引
【排序算法】深入解析快速排序(霍尔法&&三指针法&&挖坑法&&优化随机选key&&中位数法&&小区间法&&非递归版本)
【排序算法】深入解析快速排序(霍尔法&&三指针法&&挖坑法&&优化随机选key&&中位数法&&小区间法&&非递归版本)
636 4