/* * description:树的遍历示例,递归 * 访问顺序: * 前序: 当前节点 - 左子树 - 右子树 * 中序: 左子树 - 当前节点 - 右子树 * 后序: 左子树 - 右子树 - 当前节点 * * writeby: nick * date: 2012-10-22 23:56 */ #include <iostream> using namespace std; struct node { int item; node *l, *r; node(int n) {item=n; l=0; r=0;} }; typedef node *link; //前序遍历 void pretraverse(link h, void visit(link)) { if(h==0) return; visit(h); pretraverse(h->l, visit); pretraverse(h->r, visit); } //中序遍历 void midtraverse(link h, void visit(link)) { if(h==0) return; midtraverse(h->l, visit); visit(h); midtraverse(h->r, visit); } //后序遍历 void posttraverse(link h, void visit(link)) { if(h==0) return; posttraverse(h->l, visit); posttraverse(h->r, visit); visit(h); } void visit(link p) { cout << p->item << " "; } int main() { link root = new node(4); root->l = new node(5); root->r = new node(6); cout << "先序遍历:"; pretraverse(root, visit); cout << endl << "中序遍历:"; midtraverse(root, visit); cout << endl << "后序遍历:"; posttraverse(root, visit); return 0; }