binary tree traversals hdu1710

binary tree traversals hdu1710

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;	
int pre[1003],in[1003];
//后序遍历是左右根 
void dfs(int begin,int end,int root)
{
	int i;
	if(begin>end) return ;
	for(i=begin;i<=end;i++){
		if(pre[root]==in[i]) break;
	}
	dfs(begin,i-1,root+1);//左子树 ,左子树范围必定在begin到i-1之间,下一个根的位置在root+1 
	dfs(i+1,end,root+i-begin+1);
	//右子树,右子树范围必定在i+1到end之间,根的位置就是(i-begin)是左子树的大小,相当于root位置往后移左子树的个数再加一 
	cout<<pre[root];
	if(root==1)//空树 
	cout<<endl;
	else 
	cout<<" ";
}
int main()
{
	int n;
	while(~scanf("%d",&n)){
		for(int i=1;i<=n;i++)
		scanf("%d",&pre[i]);
		for(int i=1;i<=n;i++)
		scanf("%d",&in[i]);  
	dfs(1,n,1);
	}
	return 0;
 }
发布了77 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xingfushiniziji/article/details/86019562
今日推荐