众所周知,二叉树的遍历方法分为4类,分别为先序遍历、中序遍历、后序遍历和分层遍历。
记得当初学习二叉树的时候,对先序遍历、中序遍历和后序遍历总是混淆(上课时没认真听讲),忘记访问的顺序,后来自己归纳总结了两点,然后就再也没忘记过,下面来介绍下我的记忆小窍门。
先、中、后代表根的位置,而子节点的顺序是从左至右不变的。
先序遍历:根、左子树、右子树
void pre_traverse(BTree pTree)
{
if(pTree)
{
printf("%c ",pTree->data);
if(pTree->pLchild)
pre_traverse(pTree->pLchild);
if(pTree->pRchild)
pre_traverse(pTree->pRchild);
}
}
中序遍历:左子树、根、右子树
void in_traverse(BTree pTree)
{
if(pTree)
{
if(pTree->pLchild)
in_traverse(pTree->pLchild);
printf("%c ",pTree->data);
if(pTree->pRchild)
in_traverse(pTree->pRchild);
}
}
后序遍历:左子树、右子树、根
void beh_traverse(BTree pTree)
{
if(pTree)
{
if(pTree->pLchild)
beh_traverse(pTree->pLchild);
if(pTree->pRchild)
beh_traverse(pTree->pRchild);
printf("%c ",pTree->data);
}