已知一棵二叉树的中根序列和后跟序列分别为BDCEAFHG 和EDCBHGFA , 画出该二叉树
这个的中序和后序是无法构成二叉树的,如果把后序改为DECBHGFA,此二叉树为 A B F C G D E H (分支打不出来,就是A是根结点,B、F分别为其左右子树,C为B的右子树,D、E分别为C的左右子树,G为F的右子树,H为G的左子树) 程序代码为 #include已知二叉树的先序遍历和中序遍历序列如下,构造相应的二叉树。
已知二叉树的先序遍历和中序遍历序列如下,构造相应的二叉树。 ....1 ..../....\ ..2.......3 ./....../...\ 4......5.....6 ........\ .........7 根结点为1,则左为42,右5736,再看先根序列24 3576; 左边42在先根序列中以2为先,则1的下一层为2,再看中根序列42,所以4在2的右边; 右边5736在先根序列中以3为先,则3的左边是57,右边是6; 在先根序列中5先于7,在中根序列中7在5的右边; 据此可作上图 再由上图写出后根序列:4275631 答案为:B二叉树的先序、中序和后序序列 请构造出该二叉树
先序的第一个为二叉树树根A,因此后序的最后一个也是A 回到中序,以A为根划分,左子树有4个结点,右子树有5个结点 现在看后序:前4个最后的是B,因此先序的第二个是B,并且中序的第二个也是B 简化如下: 先序序列 :A B C D E F_ H _ J 中序序列 :C B E D A _ G F I _ 后序序列 :C _ _ B H G J I _ A 回到先序,A后面连续4个为左子树的先序,因此后面的F就是右子树的根 因此后序的倒数第2个就是F 再利用先序的DE和中序的ED可以得到后序为ED 于是再次简化为: 先序序列 :A B C D E F _ H _ J 中序序列 :C B E D A已知一棵二叉树的中序和前序序列如下,求该二叉树的后序序列,并画出二叉树
#include#include
#defineMAX50+3。
usingnamespacestd;
typedefcharElem_Type;
typedefstructBiTree。
{
Elem_Typedata;//数据。
tructBiTree*Lchild;//左孩子。
structBiTree*Rchild;//右孩子。
}BiTree;//要查找的元素查找的地方数组的长度。
intSearch_Num(Elem_Typenum,Elem_Type*array,intlen)。
{
for(inti=0;i
returni;
//return-1;//没有找到。
}//中序遍历后序遍历中序长度
BiTree*Resume_BiTree(Elem_Type*center,Elem_Type*back,intlen)
{
if(len<=0)
returnNULL;
BiTree*temp=newBiTree;
temp->data=*back;
intindex=Search_Num(*back,center,len);
temp->Rchild=Resume_BiTree(center+index+1,back-1,len-index-1);
temp->Lchild=Resume_BiTree(center,back-len+index,index);
returntemp;
}
voidPreOrderTraverse(BiTree*root)//前序遍历
{
if(root!=NULL)
{
cout<
PreOrderTraverse(root->Lchild);
PreOrderTraverse(root->Rchild);
}}
intmain(void)
{
Elem_Type*inorder=newElem_Type[MAX];//中序
Elem_Type*postorde=newElem_Type[MAX];//后序
intt;cin>>t;
while(t--)
{
cin>>inorder;cin>>postorde;
BiTree*root=
Resume_BiTree(inorder,postorde+strlen(postorde)-1,strlen(inorder));
PreOrderTraverse(root);
cout<
}
return0;
}
扩展资料:
(1)空二叉树——如图(a);
(2)只有一个根结点的二叉树——如图(b);
(3)只有左子树——如图(c);
(4)只有右子树——如图(d);
(5)完全二叉树——如图(e)。
注意:尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形。[1]
(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
(3)平衡二叉树——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
二叉树是树一种特殊情形,是一种更简单而且应用更加广泛的树。
参考资料来源:百度百科-二叉树