/* * 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; }