第五章 树——二叉树的层次遍历

第五章 树—二叉树的层次遍历与深度优先遍历

数据结构基础代码 (严蔚敏 人邮教育出版社)

层次遍历
我们如下图所示的二叉树作为示例,进行层次遍历演示:
在这里插入图片描述
二叉树的层次遍历利用了队列这一结构,把根节点先入队列,之后再出队列,如果根节点有左子树和右子树,则根节点的左子树入队,右子树入队,如此反复直到队列为空为止。

//树的层次遍历
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

#define MaxSize 100
//typedef int ELemType
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
void CreateTree(BiTree &T)
{
    char ch;
    cin>>ch;
    if(ch=='#')
    {
        T=NULL;
    }
    else
    {
        T=new BiTNode;
        T->data=ch;
        CreateTree(T->lchild);
        CreateTree(T->rchild);
    }
}
void Print(BiTree T)
{
    if(T)
    {
        cout<<T->data;
        Print(T->lchild);
        Print(T->rchild);
    }

}
void InorderTraversal(BiTree T)
{
    if(T)
    {
        InorderTraversal(T->lchild);
        cout << T->data;
        InorderTraversal(T->rchild);
    }
}
//层次遍历
void level(BiTree T)
{
    int front,rear;
    BiTNode *que[MaxSize];
    front=rear=0;
    BiTNode *q;
    if(T)
    {
        rear=(rear+1)%MaxSize;
        que[rear]=T;
        while(front !=rear)
        {
            front=(front+1)%MaxSize;
            q=que[front];
            cout<<q->data;
            if(q->lchild !=NULL)
            {
                rear=(rear+1)%MaxSize;
                que[rear]=q->lchild;
            }
            if(q->rchild !=NULL)
            {
                rear=(rear+1)%MaxSize;
                que[rear]=q->rchild;
            }
        }
    }
}

int main()
{
    BiTree T;
    cout<<"请输入先序遍历树的结点"<<endl;
    CreateTree(T);
    cout<<"先序遍历您所建立的树结点"<<endl;
    Print(T);
    cout<<endl;
    cout<<"中序遍历您所建立的树结点"<<endl;
    InorderTraversal(T);
    cout<<endl;
    cout<<"层次遍历您所建立的树结点"<<endl;
    level(T);
    return 0;
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值