二叉树的四种遍历方式:
二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次。
四种遍历方式分别为:先(前)序遍历、中序遍历、后序遍历、层序遍历。
1,先序遍历
所谓的先序遍历就是先访问根节点,在访问左节点,最后访问右节点。
实现代码:
void PreOrderTraverse(BiTree T)//二叉树的先序遍历
{
if(T==NULL)
return ;
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
前序遍历结果为:ABDFECGHI
2,中序遍历
所谓的中序遍历就是先访问左节点,再访问根节点,最后访问右节点。
实现代码:
void InOrderTraverse(BiTree T)//二叉树的中序遍历
{
if(T==NULL)
return ;
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
中序遍历结果为:DBEFAGHCI
3,后序遍历
其次就是后序遍历,所谓的后序遍历就是先访问左节点,再访问右节点,最后访问根节点。
实现代码:
void PostOrderTraverse(BiTree T)//后序遍历
{
if(T==NULL)
return;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
如上图所示,后序遍历结果为:DEFBHGICA
4,层序遍历
层序遍历是从根节点开始访问,从上而下逐层遍历,同一层中按从左到右顺序对接点逐个访问。
实现代码:
void cenprintf(BiTNode *T)
{
BiTNode *ans[1000],*flag;
int a=0,b=1;
if(T!=NULL)
{
ans[0]=T;
while(a!=b)
{
flag=ans[a++];
printf("%c",flag->data);
if(flag->l!=NULL)
ans[b++]=flag->l;
if(flag->r!=NULL)
ans[b++]=flag->r;
}
}
}