栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二叉树的遍历序列求法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树的遍历序列求法

二叉树的前、中、后序遍历在面试题中是否常见,可以说是非常基础而又非常实用的算法。

树的遍历 如图所示,前序遍历序列为:1 2 4 3 5
void dfs(int x)
{
	if(x==0) return;
	cout< 
中序遍历序列为:4 2 3 1 5 
void dfs(int x)
{
	if(x==0) return;
	dfs(g[x].l);
	cout< 
后序遍历序列为:4 3 2 5 1 
void dfs(int x)
{
	if(x==0) return;
	dfs(g[x].l);
	dfs(g[x].r);
	cout< 

容易看出三种遍历方法在代码中只有一行的区别,理解起来也非常简单。

已知两种遍历求第三种遍历序列 已知前序中序求后序:
int ask(int len,int pre,int in[])
{
	for(int i=1;i<=len;i++)
		if(in[i]==pre) return i;
}

void cal(int len,int pre[],int in[])
{
	if(len<=0) return;
	int root=ask(len,pre[1],in);
	cal(root-1,pre+1,in);
	cal(len-root,pre+root,in+root);
	cout< 
已知后序中序求前序: 
int ask(int len,int pre,int in[])
{
	for(int i=1;i<=len;i++)
		if(in[i]==pre) return i;
}

void cal(int len,int h[],int in[])
{
	if(len<=0) return;
	int root=ask(len,h[len],in);
	cout< 
已知前序后序求中序: 

已知前后序遍历并不一定可以唯一确定一颗树,因此中序遍历不唯一。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号