先序和中序序列确定二叉树

设一个二叉树中各结点的值互不相同,其先序遍历和中序遍历分别存在于一维数组中,试编写算法建立该二叉树的二叉链表。

思想:由先序的第一个元素可确定该树的根,在中序中找到根,根的左右子树分别可看成一棵树,然后重复递归处理左和右子树(和处理根结点一样)。

代码:

BiTree createTree(TElemType preData[],TElemType inDate[],int preStart,int preEnd,int inStart,int inEnd){
	//preData[]先序系列,inDate[]中序系列 
	//preStart先序第一个元素下标,preEnd先序最后一个元素下标
	//inStart中序第一个元素下标,inEnd中序最后一个元素下标
	BiTNode *r=(BiTNode*)malloc(sizeof(BiTNode));//创建根结点 
	r->data=preData[preStart]; //先序第一个元素作为根结点
	int ins;//找到在中序中根结点的位置
	for(ins=inStart;inData[ins]!=r->data;++ins);	
	int inLlen = ins-inStart;//中序中左子树长度 
	int inRlen =inEnd-ins;//中序中右子树长度  
	
	if(inLlen>0){//左子树不为空,创建左子树 
		r->lchild= createTree(preData,inDate,preStart+1,,preStart+inLlen,inStart,inStart+inLlen-1);
	}else{
		r->lchild=NULL; 
	}
	if(inRlen>0){//左子树不为空,创建左子树 
		r->rchild= createTree(preData,inDate,preEnd-inRlen+1,preEnd,inEnd-inRlen+1,inEnd);
	}else{
		r->rchild=NULL
	}
	return r;//返回树 
} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值