博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
已知 中序 和 前序 后序 任一 求另外一种 C实现~
阅读量:4217 次
发布时间:2019-05-26

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

核心思想:分治法

1 已知先序、中序 求后序

pre_pos 、  in_pos  、   post_pos  分别表示前中后 索引(初始均为0) 

int post[MAX];int in[MAX];int pre[MAX];

void to_post_tree(int pre_pos, int in_pos, int post_pos, int n){	  	int root;	if (n == 0)		return;	if (n == 1) {		post[post_pos] = pre[pre_pos];		return;	}	root = pre[pre_pos];	post[post_pos + n - 1] = root;//每次把当前处理区域的最后一个元素放入	int i;	for (i = 0; i < n; i++) {		if (in[in_pos + i] == root)			break;	}	int l_len, r_len;	l_len = i;	r_len = n - i - 1;	to_post_tree(pre_pos + 1, in_pos, post_pos,l_len);	to_post_tree(pre_pos + l_len+1, in_pos + l_len+1, post_pos + l_len, r_len);}

2 已知中序、后序求先序:
//
注意处理端点 
void to_pre_tree(int pre_pos, int in_pos, int post_pos, int n){	int root;	int i;	if (n == 0)		return;	if (n == 1) {		pre[pre_pos] = post[post_pos];		return;	}	root = post[post_pos+n - 1];	pre[pre_pos] = root;	for (i = 0; i < n; i++) {		if (in[in_pos+i] == root)			break;	}	int l_len, r_len;	l_len = i;//左子树长度 	r_len = n - l_len - 1;//右子树长度 	to_pre_tree(pre_pos+1, in_pos, post_pos, l_len);//递归处理左子树 与右子树 	to_pre_tree(pre_pos + l_len+1, in_pos + l_len + 1, post_pos + l_len, r_len);}
两种 方式  差别 仅在 对于 根 位置 处理上

转载地址:http://yximi.baihongyu.com/

你可能感兴趣的文章
Python学习笔记——爬虫之通过Fiddler进行手机抓包
查看>>
Python学习笔记——爬虫之Scrapy-Redis分布式组件
查看>>
Python学习笔记——爬虫之Scrapy-Redis实战
查看>>
Python学习笔记——大数据之Spark简介与环境搭建
查看>>
Python学习笔记——大数据之SPARK核心
查看>>
Python学习笔记——大数据之Pyspark与notebook使用matplotlib
查看>>
Python学习笔记——云计算
查看>>
Python学习笔记——运维和Shell
查看>>
Python学习笔记——nginx
查看>>
Python学习笔记——自动化部署
查看>>
Python学习笔记——多任务-协程
查看>>
Python学习笔记——WSGI、mini-web框架
查看>>
Python学习笔记——闭包、装饰器
查看>>
Python学习笔记——mini-web框架 添加路由、MySQL功能
查看>>
Python学习笔记——mini-web框架 添加log日志、路由支持正则
查看>>
Python学习笔记——元类、实现ORM
查看>>
Python学习笔记——Celery
查看>>
Python学习笔记——数据分析之Matplotlib绘图
查看>>
Python学习笔记——数据分析之工作环境准备及数据分析建模理论基础
查看>>
Python学习笔记——数据分析之Seaborn绘图
查看>>