已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

本文介绍了一种根据给定的中序序列和后序序列来构造二叉树的算法实现。通过递归的方式创建二叉链表存储结构,具体包括确定根节点、查找左右子树的位置并递归构造子树等步骤。
 

已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法

#define N 10 //二叉树节点的个数

char postorderstr[]={};//
后序序列
char inorderstr[]={};//中序序列

Stastus Creat_BiTree(BiTree &T,int s1,int e1,int s2,int e2)

//s1,e1为子树序列在中序序列中的起始位置,s2,e2为子树序列在后序序列中的起始位置

{

  if(!(T=(BiTNode *)malloc(sizeof (BiTNode)))) exit(OverFollow)

   T->data=postorderstr[e2];

   T->Lchild=T->Rchild=null;

   if(s1!=e1)//s1!=e1时为非叶子节点,创建子树

     {

t=FindPosition(postorderstr[e2]);

if(t!=s1)//t=s1时,该节点没有左子树

{CreatBiTree(T->Lchild,s1,t-1,s2,s2+(t1-1-s1)); }

//子树序列长度是一定的,所以在中序中易知子树序列长度为t1-1-s1,那么在后序序列中的起始位置也易知

if(t!=e1)//当时,该节点没有右子树

{CreatBiTree(T->Rchild,t1+1,e1,(e2-1)-(e1-(t+1)),e2-1);}

//注释同上

}

}

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

intFindPosition(char c)

//查找字符c在中序序列中的位置

{

  for(i=0;i<N;i++)

{

  if(inorderstr[i]==c)

   break;

}

  return i-1;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值