二叉树的各种遍历方法

来源:互联网 发布:装修网络平台有哪些 编辑:程序博客网 时间:2024/05/23 10:55

根据不同要求二叉树有不同的遍历方法,主要有先序遍历(深度优先),中序遍历,后续遍历,广度优先……因为使用二叉树时经常用到树的遍历,便写下这篇文章,以供自己日后查看和需要的人学习。
先序遍历(深度优先),中序遍历,后续遍历,这四种遍历主要是用到递归算法,程序较为简单,而广度优先则需要借助队列来完成。
1、先序遍历
这里写图片描述
遍历顺序为:ABDECF
代码为:

void PreorderTraversal( BinTree BT ){    if(BT!=NULL){        printf(" %c",BT->Data);        PreorderTraversal(BT->Left);        PreorderTraversal(BT->Right);       }}

2、中序遍历
这里写图片描述
输出为: DBEAFC
代码为:

void InorderTraversal( BinTree BT ){    if(BT!=NULL){        InorderTraversal(BT->Left);        printf(" %c",BT->Data);        InorderTraversal(BT->Right);    }}

3、后续遍历
这里写图片描述
输出为:DEBFCA
代码为:

void PostorderTraversal( BinTree BT ){    if(BT!=NULL){        PostorderTraversal(BT->Left);        PostorderTraversal(BT->Right);        printf(" %c",BT->Data);    }}

4、广度优先
这里写图片描述
输出结果为:ABCDEF
代码为:

void LevelorderTraversal( BinTree BT ){     if(!BT)return ;    int Maxsize=100;//同一时刻数组最大容量     BinTree* a=(BinTree*)malloc(sizeof(BinTree)*Maxsize);    a[0]=BT;     int left=-1,right=0;    while(left!=right) {        BinTree t=a[++left%Maxsize];            printf(" %c",t->Data);        if(t->Left){a[++right%Maxsize]=t->Left;}        if(t->Right){a[++right%Maxsize]=t->Right;}    }}
0 0
原创粉丝点击