1. 程式人生 > >通過陣列對二叉樹進行遍歷

通過陣列對二叉樹進行遍歷

在刷pat的時候經常遇到用陣列進行存取二叉樹,但是不會遍歷二叉樹(看來是我太菜了),原來陣列存取的二叉樹的遍歷和普通的遍歷基本相同,下面給出用陣列存取二叉樹的前序,中序和後序遍歷。

#include<cstdio>
#include<vector>
using namespace std;
vector<int> v(1000,-1);
int n;
void preorder(int index){
    if(index>=n)
        return ;
    printf("%d ",v[index]);
    preorder(index*2+1);
    preorder(index*2+2);
}
void inorder(int index){
    if(index>=n)
        return ;
    inorder(index*2+1);
    printf("%d ",v[index]);
    inorder(index*2+2);
}
void postorder(int index){
    if(index>=n)
        return ;
    postorder(index*2+1);
    postorder(index*2+2);
    printf("%d ",v[index]);
}
int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&v[i]);
    preorder(0);
    printf("\n");
    inorder(0);
    printf("\n");
    postorder(0);
    return 0;
}