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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM