二叉树中序层序序列还原树

本文介绍了如何通过中序和层序序列还原二叉树,重点讲解了递归和非递归两种方法。递归方法利用中序序列中根节点的下标最小的特点;非递归方法则借助队列,结合层序和中序序列确定子树。文中提供了具体的代码实现和运行结果。
摘要由CSDN通过智能技术生成

先序中序,后序中序,中序层序都可以唯一确定一棵树;

先序后序无法还原树的原因:当只有一棵子树时无法确定是左子树还是右子树;

写了一下中序层序还原树的递归和非递归方法。

用于检验算法的二叉树

中序序列为:6 7 4 11 2 5 9 8 10 1 3

层序序列为:2 7 5 6 11 1 4 8 3 9 10

递归方法

对于元素唯一的序列,记录层序各结点对应的下标,中序遍历序列的根节点肯定是在层序序列中下标数最小的结点!

  • 代码
#include<bits/stdc++.h>
using namespace std;
#define N 1000 
typedef struct node
{
   
	int v;
	node *l,*r;
}*pnode;
int car[N],inar[N];
map<int,int> cvis;
pnode func(int l,int r)
{
   
	pnode p=NULL;
	if(l<r)
	{
   
		p=(pnode)malloc(sizeof(node));
		int mid=l;
		for(int i=l+1;i<r;i++)
			if(cvis[inar[mid]]>cvis[inar[i]])
				mid=i;
		p->v=inar[mid];
		p->l=func(l,mid);
		p->r=func(mid+1,r);
	}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值