二叉树-四种遍历

124 阅读1分钟

上篇记录了二叉树的结构 这篇介绍二叉树的四种遍历方式

  • 层序遍历
//层序遍历

void LevelOrderTraverse(sqBiTree T){
    //首先找到最后一个结点
    int i = MAXSIZE-1;
    while (T[i] == 0) i--;
    for (int j = 0; j <= i; j++) {
        if (T[j] != 0) {
            printf("%d ",T[j]);
        }
    }
    printf("\n");
}
  • 前序遍历
void PreTraverse(sqBiTree T,**int** e){
    printf(" %d",T[e]);
    //遍历左子树
    if (T[2*e+1] != 0) {
        PreTraverse(T, 2*e+1);
    }
    //遍历右子树
    if (T[2*e+2] != 0) {
        PreTraverse(T, 2*e+2);
    }
}
  • 中序遍历
//中序遍历

void InTraverse(sqBiTree T, int e){

    //遍历左子树
    if (T[2*e+1] != 0) {
        PreTraverse(T, 2*e+1);
    }
    printf(" %d",T[e]);
    //遍历右子树·
    **if** (T[2*e+2] != 0) {
        PreTraverse(T, 2*e+2);
    }
}
  • 后序遍历
void PostTraverse(sqBiTree T,int e){
    //遍历左子树
    if (T[2*e+1] != 0) {
        PreTraverse(T, 2*e+1);
    }
    //遍历右子树·
    if (T[2*e+2] != 0) {
        PreTraverse(T, 2*e+2);
    }
    printf(" %d",T[e]);
}