一,
1,知道前序,中序,求后续
前序:ABCDEFGHI
中序:BCAEDGHFI
由图可知后序为:CBIHGFEDA
2.知道中序,后续求前序
中序:BDCEAFHG
后序:DECBHGFA
由后续知道根节点为A,由中序知道A的左边元素为BDCE,右边元素为FHG;由后序知道A的左子树元素为B,由中序知道B的右子树为C;由后序知道C的左子树为D,由中序知道C的右子树为E;
由后序知A的右子树为F,由中序知F无左子树,由后序知F的右子树为G,再由中序知G的左子树为H
综上可得:前序为ABDCEFGH
二,二叉树的便利
1.前序遍历
先访问根节点,再访问左子树,最后放问右子树
void preOrder(Tree *pBoot)
{
if(NULL == pBoot)
{
return ;
}
printf(“%c”,pBoot->data);//先访问根节点
preOrder(pBoot->lChild);//再访问左子树
preOrder(pBoot->rChild);//再访问右子树
}
2.中序遍历
先访问左子树,再访问根节点,最后访问右子树
void midOrder(Tree *pBoot)
{
if(NULL == pBoot)
{
return ;
}
midOrder(pBoot->lChild);//先访问左子树
printf(“%c”,pBoot->data);再访问根结点
midOrder(pBoot->rChild);//最后访问右子树
}
3.后续遍历
先访问左子树,再访问右子树,最后访问根节点
void postOrder(Tree *pBoot)
{
if(NULL == pBoot)
{
return ;
}
postOrder(pBoot->lChild);//先访问左节点
postOrder(pBoot->rChild);//再访问右节点
printf(“%c”,pBoot->data);//最后访问根节点
}