二叉树的创建与遍历

本文介绍了一种使用C++实现二叉树的方法,包括先序创建二叉树的过程,并提供了先序、中序、后序及层序遍历的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <stdlib.h>

using namespace std;

struct BiTNode;

typedef struct BiTNode* PBiTNode;

struct BiTNode
{
    char data;
    PBiTNode lchild, rchild;
};

typedef BiTNode* BinTree;

//创建二叉树T,先序
void createBiTree(BinTree &t)
{
    char c;
    t=(BinTree)malloc(sizeof(BiTNode));

    cin >> c;

    if (c=='#')
        t=NULL;
    else
    {
        t->data=c;
        createBiTree(t->lchild);
        createBiTree(t->rchild);
    }
}

//先序遍历
void PreOrder(BinTree t)
{
    if (t==NULL)
        return ;
    else
    {
        cout << (t->data) << " ";
        PreOrder(t->lchild);
        PreOrder(t->rchild);
    }

}

//中序遍历
void InOrder(BinTree t)
{
    if (t==NULL)
        return ;
    else
    {
        InOrder(t->lchild);
        cout << t->data << " ";
        InOrder(t->rchild);
    }
}

//后序遍历
void PostOrder(BinTree t)
{
    if (t==NULL)
        return ;
    else
    {
        PostOrder(t->lchild);
        PostOrder(t->rchild);
        cout << t->data << " ";
    }
}

//层序遍历,从左到右
void LevelOrder(BinTree t)
{
    int front=0,rear=1;

    BiTNode *q[100];

    q[0]=t;

    while(front<rear)
    {

        if(q[front])
        {
            cout << q[front]->data <<" ";

            q[rear++]=q[front]->lchild;

            q[rear++]=q[front]->rchild;

            front++;
        }
        else
        {
            front++;

        }
    }
}

int main()
{
    BinTree t;

    cout<<"先根创建二叉树:"<<endl;
    createBiTree(t);

    cout<<"先根遍历: ";
    PreOrder(t);
    cout<<endl;

    cout<<"中根遍历: ";
    InOrder(t);
    cout<<endl;

    cout<<"后根遍历: ";
    PostOrder(t);
    cout<<endl;

    cout<<"层序遍历,从左到右: ";
    LevelOrder(t);
    cout<<endl;

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值