主题:二叉树算法实现
			 诺
				 [专家分:0]  发布于 2006-04-23 09:50:00
 诺
				 [专家分:0]  发布于 2006-04-23 09:50:00							
			已知一棵二叉树的后序遍历序列和中序遍历序列,写出可以唯一确定一棵二叉树的算法
						
					 
		
			
回复列表 (共2个回复)
		
								
				沙发
				
					 rickone [专家分:15390]  发布于 2006-04-23 21:52:00
rickone [专家分:15390]  发布于 2006-04-23 21:52:00				
				后序序列的最后一个就是根,找到根之后再从中序序列中找到它,那它左边的就是左子树,右边的就是右子树,全部找出来了,然后就递归咯~~
							 
						
				板凳
				
					 海上飞洪 [专家分:520]  发布于 2006-04-23 22:59:00
海上飞洪 [专家分:520]  发布于 2006-04-23 22:59:00				
				char Pred,Ind; //假设前序序列和中序序列已经分别储存在数组Pre和In中 
Bitree Build_Sub(int Pre_Start,int Pre_End,int In_Start,int In_End)//由子树的前序和中序序列建立其二叉链表
{
  sroot=(BTNode*)malloc(sizeof(BTNode)); //建根
  sroot->data=Pre[Pre_Start];
  for(i=In_Start;In[i]!=sroot->data;i++); //在中序序列中查找子树根
  leftlen=i-In_Start;
  rightlen=In_End-i; //计算左右子树的大小
  if(leftlen)
  {
    lroot=Build_Sub(Pre_Start+1,Pre_Start+leftlen,In_Start,In_Start+leftlen-1);
    sroot->lchild=lroot;
  } //建左子树,注意参数表的计算
  if(rightlen)
  {
    rroot=Build_Sub(Pre_End-rightlen+1,Pre_End,In_End-rightlen+1,In_End);
    sroot->rchild=rroot;
  } //建右子树,注意参数表的计算
  return sroot; //返回子树根
}//Build_Sub 
							 
									
			
我来回复