数据结构实验之二叉树四:还原二叉树
2017-08-16 19:31
295 查看
数据结构实验之二叉树四:还原二叉树
Time Limit: 1000MS Memory Limit: 65536KBProblem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9
ABDFGHIEC
FDHGIBEAC
Example Output
5
#include <bits/stdc++.h> using namespace std; typedef struct node { char data; struct node *lchild, *rchild; }BiTNode, *BiTree; void createBiTree(BiTree &T, char front[], char mid[], int len) { if(len == 0) { T = NULL; return ; } T = (BiTNode *)malloc(sizeof(BiTNode)); if(!T) T = NULL; T -> data = front[0]; //先序序列第一个字母即为树根 int t = 0; while(front[0] != mid[t]) //在中序列中树根之前的为左子树 { t++; } createBiTree(T -> lchild, front+1, mid, t); createBiTree(T -> rchild, front+t+1, mid+t+1, len-t-1); } int deepth(BiTree T) { int depthval, depthleft, depthright; if(!T) //树为空,高度为0 depthval = 0; else { depthleft = deepth(T -> lchild); //左子树高度 depthright = deepth(T -> rchild); //右子树高度 depthval = 1 + (depthleft > depthright ? depthleft : depthright); //取左右子树高度高的为树的高度 } return depthval; } int main() { int n; BiTree T; char front[100], mid[100]; while(cin >> n) { cin >> front >> mid; createBiTree(T, front, mid, n); cout << deepth(T) << endl; } return 0; }
相关文章推荐
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- SDUT-3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- SDUT 3343 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树 oj
- 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树 (sdut oj 3343)
- 数据结构实验之二叉树四:还原二叉树
- sdutacm-数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树