C++遍历树递归

/*
*   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;
}
原文地址:https://www.cnblogs.com/wouldguan/p/2735119.html