二叉树遍历序列的转换| MadFroG

已知二叉树中序遍历序列,再加前序遍历序列或后序遍历序列的一种,可以{wy}确定一棵二叉树。(已知前序和后序得到的二叉树可能不{wy}。)
前序和后序遍历的作用类似,用于确定根节点,进而分割中序序列。

代码以前序遍历加中序遍历为例。

#include <stdio.h>
#include <string.h>
 
const int MaxN = 1001;
char pre[MaxN] , in[MaxN];
int hash[128];
int cnt;
 
typedef struct Node	{
	char ch;
	Node *lch , *rch;
}	Node , *Tree;
 
void DFS(Tree &T , int s , int r)
{
	if (s > r)	{
		T = NULL;
		return;
	}
	T = new Node;
	int i = cnt ++;
	T->ch = pre[i];
	DFS(T->lch , s , hash[pre[i]] - 1);
	DFS(T->rch , hash[pre[i]] + 1 , r);
}
 
void PostOrderTraverse(Tree T)
{
	if (T == NULL)	return;
	PostOrderTraverse(T->lch);
	PostOrderTraverse(T->rch);
	printf("%c" , T->ch);
 
}
 
void __test()
{	
	puts("前序遍历序列:");
	scanf("%s" , pre);
 
	puts("中序遍历序列:");
	scanf("%s" , in);
	Tree T = NULL;
	int len = strlen(pre) , i;
	memset(hash , -1 , sizeof(hash));
	cnt = 0;
	for (i = 0;i < len;i ++)	{
		hash[in[i]] = i;
	}
	DFS(T , 0 , len - 1);
	puts("后序遍历序列:");
	PostOrderTraverse(T);
}
 
int main()
{
	__test();
	return 0;
}

Tags:

Your Reply

郑重声明:资讯 【二叉树遍历序列的转换| MadFroG】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——