二叉树的遍历分为三个类型
- 先序遍历
- 先访问根节点
- 再先序访问左子树
- 再先序访问右子树
- 中序遍历
- 先访问左子树
- 再中序访问根节点
- 再中序访问右子树
- 后序遍历
- 先访问左子树
- 再后序访问右子树
- 再后序访问根节点
下面我们用程序来演示以上三种遍历操作
首先我们先创造一颗树,这个是我之前写的创造二叉树树的代码以及树的基本形状
二叉树的创建_RogersX的博客-CSDN博客https://blog.csdn.net/RogersX/article/details/123558892
注意:由于我创建的节点保留的数据是字符类型
因此我下面的遍历程序printf根节点的数据用的都是%c输出控制符!
接下来开始准备工作
int main(void)
{
struct BTNode * pT=createBTree();
PreTraverseBTree(pT);//先序
InTraverseBTree(pT);//中序
PostTraverseBTree(pT);//后序
return 0;
}
接下来是先序遍历程序
伪代码:
先访问根节点
再先序访问左子树
再先序访问右子树
void PreTraverseBTree(struct BTNode* pT)
{
if (pT != NULL)
{
printf("%c", pT->data);//先访问根节点的数据
//访问左子树
while (pT->pLchild!=NULL)
{
PreTraverseBTree(pT->pLchild);
}
//访问右子树
while (pT->pRchild1=NULL)
{
PreTraverseBTree(pT->pRchild);
}
}
}
中序遍历程序
伪代码:
先访问左子树
再中序访问根节点
再中序访问右子树
void InTraverseBTree(struct BTNode* pT)
{
if (pT != NULL)
{
//先访问左子树
while(pT->pLchild!=NULL)
InTraverseBTree(pT);
//访问根节点
printf("%c", pT->data);
//访问右子树
while (pT->pRchild != NULL)
{
InTraverseBTree(pT);
}
}
}
后序遍历程序
伪代码:
后序遍历左子树
后序遍历右子树
访问根节点
void PostTraverseBTree(struct BTNode* pT)
{
if (pT != NULL)
{
while (pT->pLchild != NULL)
{
PostTraverseBTree(pT->pLchild);
}
while (pT->pRchild != NULL)
{
PostTraverseBTree(pT->pRchild);
printf("%c", pT->data);
}
}
}