#include <iostream>
#include <stack>
#include <queue>

using namespace std;

struct BitreeNode
{
    int data;
    struct BitreeNode *lchild, *rchild;
};

void InitTreeNode(BitreeNode &t, int data, BitreeNode *lchild, BitreeNode *rchild)
{
    t.data = data;
    t.lchild = lchild;
    t.rchild = rchild;
}

//前序
void PreOrder(BitreeNode *t)
{
    if (t != nullptr)
    {
        cout << t->data << " ";
        PreOrder(t->lchild);
        PreOrder(t->rchild);
    }
}
//中序
void Inorder(BitreeNode *t)
{
    if (t != nullptr)
    {
        Inorder(t->lchild);
        cout << t->data << " ";
        Inorder(t->rchild);
    }
}
//后序
void PostOrder(BitreeNode *t)
{
    if (t != nullptr)
    {
        PostOrder(t->lchild);
        PostOrder(t->rchild);
        cout << t->data << " ";
    }
}

//层次遍历
void LevelOrder(BitreeNode *t)
{
    queue<BitreeNode *> q;
    BitreeNode *p;
    q.push(t);


    while (!q.empty())
    {
        p = q.front();
        q.pop();
        cout << p->data << " ";
        if (p->lchild != nullptr)
            q.push(p->lchild);
        if (p->rchild != nullptr)
            q.push(p->rchild);
    }
}

int main()
{
    BitreeNode t1, t2, t3, t4, t5, t6, t7;

    InitTreeNode(t4, 4, nullptr, nullptr);
    InitTreeNode(t5, 5, nullptr, nullptr);
    InitTreeNode(t6, 6, nullptr, nullptr);
    InitTreeNode(t7, 7, nullptr, nullptr);
    InitTreeNode(t2, 2, &t4, &t5);
    InitTreeNode(t3, 3, &t6, &t7);
    InitTreeNode(t1, 1, &t2, &t3);

    //层次遍历
    LevelOrder(&t1);
    cout << endl;
    //前序遍历
    PreOrder(&t1);
    cout << endl;
    //中序遍历
    Inorder(&t1);
    cout << endl;
    //后续遍历
    PostOrder(&t1);
    cout << endl;
    system("pause");
    return 0;
}

运行测试:

01-22 04:46
查看更多