美文网首页
二叉树层次遍历(利用队列)

二叉树层次遍历(利用队列)

作者: jas_go | 来源:发表于2019-10-09 11:50 被阅读0次
#include <iostream>
#include <string>
using namespace std;
// 二叉树
typedef struct BiTNode
{
    string data;
    BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

// 初始化二叉树
BiTree tree;
tree = new BiTNode;
tree->data = "A";

BiTNode *p;

p = new BiTNode;
p->data="B";
p->lchild=NULL;
p->rchild=NULL;
tree->lchild=p;

p = new BiTNode;
p->data="C";
p->lchild=NULL;
p->rchild=NULL;
tree->rchild=p;


p = new BiTNode;
p->data="D";
p->lchild=NULL;
p->rchild=NULL;
tree->lchild->lchild=p;

p = new BiTNode;
p->data="E";
p->lchild=NULL;
p->rchild=NULL;
tree->lchild->rchild=p;

p = new BiTNode;
p->data="F";
p->lchild=NULL;
p->rchild=NULL;
tree->rchild->lchild=p;

p = new BiTNode;
p->data="G";
p->lchild=NULL;
p->rchild=NULL;
tree->rchild->rchild=p;

p = new BiTNode;
p->data="H";
p->lchild=NULL;
p->rchild=NULL;
tree->rchild->lchild->lchild=p;


p = new BiTNode;
p->data="I";
p->lchild=NULL;
p->rchild=NULL;
tree->rchild->lchild->rchild=p;

typedef struct LinkNode{
    BiTree data;
    LinkNode *next;
}LinkNode;

typedef struct
{
    LinkNode *front, *rear;
}LinkQueue;

void InitQueue(LinkQueue &Q)
{
    Q.front=Q.rear=new LinkNode;
    Q.front->next=NULL;
}
//从队尾插入
void EnQueue(LinkQueue &Q, BiTree x)
{
    LinkNode *s;
//     s =(LinkNode*)malloc(sizeof(LinkNode));
    s = new LinkNode;
    s->data=x;
    s->next=NULL;
    Q.rear->next=s;
    Q.rear=s;
}

void DeQueue(LinkQueue &Q, BiTree &x)
{
    LinkNode *p=Q.front->next;
    x = p->data;
    Q.front->next=p->next;
    if(Q.front->next==NULL)
        Q.rear=Q.front;//注意不能写成Q.front=Q.rear;
    free(p);
}

bool QueueEmpty(LinkQueue Q)
{
    if(Q.front==Q.rear)
        return true;
    else
        return false;
}

void LevelOrder(BiTree T)
{
    LinkQueue q;
    BiTree t;
    InitQueue(q);
    EnQueue(q, T);
    while(!QueueEmpty(q))
    {
        DeQueue(q, t);
        cout<<t->data;
        if(t->lchild)
            EnQueue(q,t->lchild);
        if(t->rchild)
            EnQueue(q, t->rchild);
    }
}

LevelOrder(tree)

/*
输出:
ABCDEFGHI
*/

相关文章

  • 二叉树 队列 数组 层次遍历

    bfs 和 队列 学过数据结构的都知道,二叉树的层次遍历。 层次遍历利用的数据结构是队列。 那么, 思考一下 为什...

  • Java二叉树的遍历

    Java二叉树的遍历 利用递归和非递归实现二叉树的先序,中序,后序遍历以及使用队列实现二叉树的层次遍历

  • 数据结构与算法二叉树的遍历与线索二叉树以及森林

    1.二叉树的遍历先序遍历、中序遍历、后序遍历 2.层次遍历利用队列实现 3.由遍历序列构成二叉树先序、后序可以与众...

  • 二叉树层次遍历

    二叉树层次遍历,又称为宽度优先搜索,按树的层次依次访问树的结点。层次遍历使用队列对遍历节点进行 存储,先进入队列的...

  • 二叉树的层次遍历

    三道层次遍历题,同一个模板,这边用到的是两个队列 二叉树的层次遍历 LeetCode题目地址 二叉树的层次遍历 加...

  • 数据结构重学日记(二十二)二叉树的层次遍历

    二叉树的层次遍历也属于非递归遍历,和之前先序、中序、后序遍历的区别在于层次遍历需要借助队列来实现。 层次遍历的操作...

  • 二叉树遍历

    1.层次遍历(广度优先遍历) 用队列实现,队首出队,队首的子节点入队。 1,二叉树的层次遍历, 打印 2,二叉树的...

  • 从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路 1、利用队列进行层次遍历2、每次弹出队列中...

  • 二叉树的四种遍历方法

    二叉树的数据结构 1、前序遍历(递归) 2、中序遍历(递归) 3、后序遍历(递归) 4、层次遍历(队列)

  • 二叉树的非递归遍历

    先序遍历 利用栈进行树的非递归便利遍历 中序遍历 后序遍历 层次遍历 使用队列进行树的层次遍历(广度优先遍历,Br...

网友评论

      本文标题:二叉树层次遍历(利用队列)

      本文链接:https://www.haomeiwen.com/subject/tljwuctx.html