博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构实习 problem L 由二叉树的中序层序重建二叉树
阅读量:4972 次
发布时间:2019-06-12

本文共 2129 字,大约阅读时间需要 7 分钟。

由二叉树的中序层序重建二叉树

writer:pprp

用层序中序来重建二叉树

其实本质上与前序中序建立二叉树没有什么太大区别

大概思路:

递归解法,对当前层进行处理,通过层序遍历可以得到当前的根节点,然后在中序遍历中找到该节点,对左右两边的内容进行分析,理想情况下应该是可以递归进行下去,找到左子树的中序遍历和层序遍历,找到右子树的中序遍历和层序遍历,然后进行递归,但是可以发现,层序遍历是交错的,所以是需要重新处理以后才能进行递归

现在只要通过处理得到左子树右子树的层序遍历序列就好了,通过两层循环找到在左子树中出现的元素在层序遍历中出现的顺序,并将其存储在新开的数组中,然后就可以继续递归下去了

代码如下:

#include 
#include
#include
#include
using namespace std;const int maxn = 10000;struct tree{ tree * l, *r; int data; tree() { l = r = NULL; data = 0; }};int layer[maxn], in[maxn];//前序遍历void PreOrder(tree * root){ if(root != NULL) { cout << root->data << " "; PreOrder(root->l); PreOrder(root->r); }}//后序遍历void PostOrder(tree * root){ if(root != NULL) { PostOrder(root->l); PostOrder(root->r); cout << root->data << " "; }}//从 0 开始tree * CreateTree(int * layer, int * in, int t){ if(t == 0) return NULL; int Llayer[maxn], Rlayer[maxn]; int Lin[maxn], Rin[maxn]; tree * node = new tree; node->data = layer[0]; //find the place of the root int i; for(i = 0; i < t; i++) if(in[i] == layer[0]) break; //in order int cnt = 0; for(int j = 0; j < i ; j++) Lin[cnt++] = in[j]; cnt = 0; for(int j = i+1; j < t; j++) Rin[cnt++] = in[j]; cnt--; //layer order int Llayercnt = 0; int Rlayercnt = 0; for(int j = 1; j < t ; j++) for(int k = 0 ; k < i ; k++) if(layer[j] == in[k]) Llayer[Llayercnt++] = layer[j]; for(int j = 1; j < t; j++) for(int k = i ; k < t; k++) if(layer[j] == in[k]) Rlayer[Rlayercnt++] = layer[j]; node->l = CreateTree(Llayer,Lin,Llayercnt); node->r = CreateTree(Rlayer,Rin,Rlayercnt); return node;}int main(){ int n; cin >> n; for(int i = 0 ; i < n ; i++)cin >> layer[i]; for(int i = 0 ; i < n ; i++)cin >> in[i]; tree * root; root = CreateTree(layer,in,n); PreOrder(root); cout << endl; PostOrder(root); return 0;}

转载于:https://www.cnblogs.com/pprp/p/7725729.html

你可能感兴趣的文章
修改 CKEditor 超链接的默认协议
查看>>
zoj3795 Grouping --- 良好的沟通,寻找最长的公路
查看>>
【SSH2(理论+实践)】--Hibernate步步(一个)
查看>>
深入浅出JMS(一)——JMS简要
查看>>
JDBC连接MySQL数据库及演示样例
查看>>
小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(四)Alert View视图 学习笔记...
查看>>
多线程基础(二)pthread的了解
查看>>
百度SDK的使用第一天
查看>>
python学习笔记3:列表、元组和集合
查看>>
数组的初始化
查看>>
bzoj3156 防御准备
查看>>
Git----查看提交日志
查看>>
XE7/X10.2 Datasnap使用 dbExpress 连接MySQL数据库
查看>>
Eclipse修改编码格式
查看>>
生成器和协程 —— 你想知道的都在这里了
查看>>
初级算法-6.两个数组的交集 II
查看>>
欧拉函数 / 蒙哥马利快速幂 / 容斥
查看>>
Makefile
查看>>
软件开发文档以及项目开发流程理解
查看>>
2019微软Power BI 每月功能更新系列——Power BI 4月版本功能完整解读
查看>>