前序遍历

按照根节点、左子树、右子树的顺序输出节点编号。称为树的前序遍历

#define MAX 10000
#define NIL -1

struct Node { int p, l, r;};
struct Node T[MAX];

void preOrder(int u) {
    if(u == NIL) return;
    printf(" %d", u);
    preOrder(T[u].l);
    preOrder(T[u].r);
}

中序遍历

按照左子树、根节点、右子树的顺序输出节点编号。称为树的中序遍历

void inOrder(int u) {
    if(u == NIL) return;
    inOrder(T[u].l);
    printf(" %d", u);
    inOrder(T[u].r);
}

后序遍历

按照左子树、右子树、根节点的顺序输出节点编号。称为树的后序遍历

void postOrder(int u) {
    if(u == NIL) return;
    postOrder(T[u].l);
    postOrder(T[u].r);
    printf(" %d", u);
}