您的位置:首页 > 其它

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

2006-01-22 13:36 836 查看
已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法

#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);}

//注释同上

}

}



intFindPosition(char c)

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

{

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

{

if(inorderstr[i]==c)

break;

}

return i-1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐