模板-根据先序遍历和中序遍历建立二叉树- HDU-1710-Binary Tree Traversals

#include <stdio.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int t1[1000],t2[1000],count1=1;
typedef struct Tree_node{
	int data;
	struct Tree_node *lchild, *rchild;
}Tnode,*Tree;
void PTree_H(Tree T){
		if(T) 
		{
			PTree_H(T->lchild);
			PTree_H(T->rchild);
			if(count1) cout<<T->data,count1=0;
			else cout<<" "<<T->data;
		}
}
void Built(int i, int j, int i1 , int j1, Tree &T){   // i j  , i1 j1 是两数组的起始下标和结尾下标 通过不断更新它们的范围来判断是否有左右子树 
	int r;
	for(int k = i1; k <=j1; k++){
		if(t1[i] == t2[k])
		{
			r = k;
			break;
		}
	}
	T = new Tnode;    //分配空间      
	T->data = t2[r];   
	int l = r - i1;  // 此根节点的左子树的剩余节点数  
	if(l>0)    // 如果有左子树 
	    Built(i+1,j,i1,r-1,T->lchild); // i+1移至下一个根节点,并将j1移至r-1
	else T->lchild=NULL;  	
	if(r<j1)   // 如果有右子树 
	    Built(i+l+1,j,r+1,j1,T->rchild);//i+l+1,移至当前节点的右子树节点,将j移至r+1
	else T->rchild=NULL;
	return ; 
}	
int main()
{
	int a;
	while(cin>>a){
		count1 = 1;
		for(int i = 0; i < a; i++)
			cin>>t1[i];
		for(int i = 0; i < a; i++)
			cin>>t2[i];
		for(int i = 0;i < a; i++){
		}
		Tree T;
		Built(0, a-1,  0, a-1, T);
		PTree_H(T);
		cout<<endl;
	}
	return 0;
}

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值