已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法
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;
}
#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;
}
相关文章推荐
- (1)建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出对用二叉链表存储的二叉树进行层次遍历算法。 (4)求二叉树的所有叶子及结点总数。
- 输入完全二叉树的先序序列,用#代表虚结点(空指针),如ABD###CE##F##,建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出
- 【数据结构作业四】以二叉链表作存储结构,建立一棵二叉树,并输出该二叉树的先序、中序、后序遍历序列、高度和其叶子结点数。
- 已知线性表中元素以值递增有序排列,并以单链表作为存储结构,设计一个算法,删除表中值相同的多余元素
- 建一棵二叉树,能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数
- 二叉树的二叉链表存储结构
- 数据结构与算法学习之二叉树的遍历:已知先序、中序、后序序列三者中的两种求另外一种遍历的算法
- 关于二叉树的二叉链表存储结构的两道题目
- 算法竞赛入门经典:第六章 数据结构基础 6.9 根据二叉树的后序和中序确定前序序列
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 二叉树的二叉链表存储结构构建以及先序遍历
- 已知一棵二叉树的后序遍历和中序遍历,写出可以确定这棵二叉树的算法
- 给定一棵二叉树,设计一个算法,创建含有某一深度上所有结点的链表(比如:若一棵树的深度为D,则会创建出D个链表)
- 数据结构——已知先序和中序序列,建立二叉树的二叉链表
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 若用链表存储一棵二叉树时,每个节点除数据域外,还有指向左孩子和右孩子的两个指针,在这种存储结构中,n歌节点的二叉树共有2N个指针域,其中有N-1个指针域存放了地址,有N+1个指针是空指针。
- 6.33③ 假定用两个一维数组L[1..n]和R[1..n]作为 有n个结点的二叉树的存储结构, L[i]和R[i]分别指 示结点i的左孩子和右孩子,0表示空。试写一个算法 判别结点u是否为结点v的
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 二叉树的二叉链表存储结构
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么