已知一颗二叉树的前序和中序序列,唯一的确定一颗二叉树

已知一颗二叉树的前序和中序序列,唯一的确定一颗二叉树,由此构造二叉树的递归算法。

设前序序列和中序序列分别存放两个一维数组,pre(1,n)和ind(1,n),按前序序列pre(i,j)和中序序列ind(u,v)递归构造二叉树,其根结点指针为s。

typedef  struct  bnode
{ Elemtype data;
   struct bnode *left,*right;
 }btree;
btree *bintree(int i,int j,int u,int v)
{
   int k,l;
   btree *head,*s;
   head=NULL;
   if(j>=i)
   {
       head=new btree; //建立根结点
       head->data=pre[i];
       k=u;
       while(ind[k]!=pre[i]) k++//在中序序列中查找根结点
       l=i+k-u;//l为左子树中最右下结点在前序序列中的位置
       if(k==u) //左子树为空
        head->left=NULL;
       else
        {
            s=bintree(i+1,l,u,k-1);//构造左子树
            head->left=s;
        }
      if(k==v)//右子树为空
        head->right=NULL;
      else
        {
            s=bintree(l+1,j,k+1,v);//构造右子树
            head->right=s;
        }            
   }      
    
return head;
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值