根据不同要求二叉树有不同的遍历方法,主要有先序遍历(深度优先),中序遍历,后续遍历,广度优先……因为使用二叉树时经常用到树的遍历,便写下这篇文章,以供自己日后查看和需要的人学习。
先序遍历(深度优先),中序遍历,后续遍历,这四种遍历主要是用到递归算法,程序较为简单,而广度优先则需要借助队列来完成。
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;}
}
}