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