二叉树的四种遍历方式

第一种:前序遍历

void bt_pre_order_traverse(btree tree) {
    if (tree != NULL) {
        printf("%c->", tree->data);
        bt_pre_order_traverse(tree->lchild);
        bt_pre_order_traverse(tree->rchild);
    }
}

第二种:后序遍历

void bt_post_order_traverse(btree tree) {
    if (tree != NULL) {
        bt_mid_order_traverse(tree->lchild);
        bt_mid_order_traverse(tree->rchild);
        printf("%c->", tree->data);
    }
}

第三种:中序遍历

void bt_mid_order_traverse(btree tree) {
    if (tree != NULL) {
        bt_mid_order_traverse(tree->lchild);
        printf("%c->", tree->data);
        bt_mid_order_traverse(tree->rchild);
    }
}

第四种:层次遍历(通过使用队列实现)

void bt_traverse_by_level(btree tree) {
    if (tree != NULL) {
        btree p;
        btree qu[MAX_SIZE];
        int front;
        int rear;
        front = rear = -1;
        rear++;

        qu[rear] = tree;
        while (front != rear) {
            front = (front + 1) % MAX_SIZE;
            p = qu[front];
            printf("%c->", p->data);
            if (p->lchild != NULL) {
                rear = (rear + 1) % MAX_SIZE;
                qu[rear] = p->lchild;
            }
            if (p->rchild != NULL) {
                rear = (rear + 1) % MAX_SIZE;
                qu[rear] = p->rchild;
            }
        }
    }
}

你可能感兴趣的:(算法,二叉树,职场,休闲)