数据结构实验之二叉树四:(先序中序)还原二叉树
数据结构实验之二叉树四:(先序中序)还原二叉树
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Sample Input
9
ABDFGHIEC
FDHGIBEAC
Sample Output
5
#include<cstdio> #include<cstring> #include<cstdlib> using namespace std; struct Tree { char data; Tree *l, *r;/// }; char s[55], t[55]; Tree *creat(char *s, char *t, int n) { Tree *tree; if(n == 0) return NULL; tree = (Tree *)malloc(sizeof(Tree)); tree->data = s[0];//先序序列第一个字母即为树根 int i = 0; while(s[0] != t[i]) i++;//在中序列中树根之前的为左子树 tree->l = creat(s + 1, t, i); tree->r = creat(s + i + 1, t + i + 1, n - i - 1);return tree;/// } int deepth(Tree *tree) { int dl, dr, ds; if(!tree) return 0;//树为空,高度为0 else { dl = deepth(tree->l);//左子树高度 dr = deepth(tree->r);//右子树高度 ds = 1 + (dl > dr ? dl : dr);//取左右子树高度高的为树的高度 } return ds; } int main() { int n; Tree *tree; while(scanf("%d\n", &n) != EOF) { scanf("%s %s", s, t); tree = creat(s, t, n); printf("%d\n", deepth(tree)); } return 0; }
tree->l = creat(s + 1, t, i); tree->r = creat(s + i + 1, t + i + 1, n - i - 1);
另一种写法
上面的是mooc武汉大学数据结构
https://www.geek-share.com/detail/2640620541.html
解释:
一、前序+中序
- 根据前序序列的第一个元素建立根结点;
- 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
- 在前序序列中确定左右子树的前序序列;
- 由左子树的前序序列和中序序列建立左子树;
- 由右子树的前序序列和中序序列建立右子树。
如:已知一棵二叉树的先序遍历序列和中序遍历序列分别是abdgcefh、dgbaechf,求二叉树及后序遍历序列。
先序:a b d g c e f h —>a bdg cefh
0 1 2 3 4 5 6 7 0 s + 1
中序:dgbaechf---->dgb(左子树 a(跟) echf(右子树)
得出结论:a是树根,a有左子树和右子树,左子树有bdg结点,右子树有cefh结点。
先序:bdg—>b dg
中序:dgb —>dg b
得出结论:b是左子树的根结点,b无右子树,有左子树。
先序:dg---->d g
中序:dg----->dg
得出结论:d是b左子树的根节点,d无左子树,g是d的右子树
然后对于a 的右子树类似可以推出
最后还原: a
b c d e f g h
后序遍历:gdbehfca
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- SDUT 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- C语言 数据结构之二叉树 数据结构实验之二叉树四:(先序中序)还原二叉树
- SDUT-3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树 oj
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- [SDUT](3343)数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树