概述
二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。
目录
一、看图理解:
1.前序遍历
2.中序遍历
3.后序遍历
4.层序遍历
二、代码展示
一、看图理解:
1.前序遍历
前序遍历结果:ABDHIEJCFKG
如图:
要点: 先根 再左 后右 (根指的是每个分叉子树的根结点,并不一定是最上面的,也有可能是相对而言的根)
思路分析:先遍历根结点A(即先根),接着遍历结点A的左孩子B(即再左),因为B结点也相当于“根结点”(对结点DEHIJ而言),所以接着要遍历结点B的左孩子D,同理接着遍历结点H,然后因为结点H为叶子,不能做“根结点”,所以要进行“后右”,即遍历H的长辈的右孩子I,同理接着遍历结点E......(跟着思路多走几遍就懂啦)
2.中序遍历
中序遍历结果:HDIBEJAFKCG
如图:
要点:先左 再根 后右
记忆方法:把所有结点间连线删除,所有结点当做实心球向下做自由落体运动落在地上,然后从左向右遍历所有结点。如下图:
3.后序遍历
后序遍历结果:HIDJEBKFGCA
如图:
要点:先左 再右 后根
记忆方法:用剪刀依次“剪断”结点间连线,每次“剪下”一个结点且从最左边开始,根据左、右、根的优先性选择最优的线“剪断”。(建议多看几遍便于理解)
4.层序遍历
层序遍历是最好理解的遍历方式,就是从最上面的根结点开始,从上到下的一层一层遍历,每一层从左到右依次遍历就行了。
如图:
二、代码展示
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
//创建一颗二叉树
CreateBiTree(BiTree *T)
{
char c;
scanf("%c",&c);
if(' '==c)
{
*T=NULL;
}
else
{
*T = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->data = c;
CreateBiTree(&(*T)->lchild); //用递归以创建二叉树
CreateBiTree(&(*T)->rchild);
}
}
//访问二叉树结点的具体操作
visit(char c,int level)
{
printf("%c位于第%d层n",c,level);
}
//前序遍历二叉树
qianxubianlierchashu(BiTree T,int level)
{
if(T)
{
visit(T->data,level); //先根
qianxubianlierchashu(T->lchild,level+1); //再左
qianxubianlierchashu(T->rchild,level+1); //后右
}
}
//中序遍历二叉树
zhongxubianlierchashu(BiTree T,int level)
{
if(T)
{
zhongxubianlierchashu(T->lchild,level+1); //先左
visit(T->data,level); //再根
zhongxubianlierchashu(T->rchild,level+1); //后右
}
}
//后序遍历二叉树
houxubianlierchashu(BiTree T,int level)
{
if(T)
{
houxubianlierchashu(T->lchild,level+1); //先左
houxubianlierchashu(T->rchild,level+1); //再右
visit(T->data,level); //后根
}
}
int main()
{
int level=1;
BiTree T =NULL;
int i;
printf("请选择您想要使用的遍历方法(前序遍历请输入1,中序遍历请输入2,后序遍历请输入3。)");
scanf("%d",&i);
CreateBiTree(&T);
if(i==1)
{
qianxubianlierchashu(T,level);
}
else if(i==2)
{
zhongxubianlierchashu(T,level);
}
else if(i==3)
{
houxubianlierchashu(T,level);
}
return 0;
}
今天的我们很好,明天的我们更好。
最后
以上就是妩媚八宝粥为你收集整理的数据结构和算法——二叉树的遍历(C语言)一、看图理解: 二、代码展示的全部内容,希望文章能够帮你解决数据结构和算法——二叉树的遍历(C语言)一、看图理解: 二、代码展示所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复