BFS的分层(利用queue)

  • 层序遍历二叉树,并且每层换行打印

有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。
https://www.nowcoder.com/questionTerminal/316469a26b5048c984881e761692a382

vector<vector<int> > printTree(TreeNode* root) 
{
    vector<vector<int>> list;
    vector<int> inlist;
    queue<TreeNode *> q;
    if (root == NULL) return list;
    q.push(root);
    TreeNode * last = root;
    while (!q.empty())
    {
        root = q.front();
        q.pop();
        if (root->left != NULL) q.push(root->left);
     if (root->right != NULL) q.push(root->right);
        inlist.push_back(root->val);
        if (last == root)
        {
            last = q.back();
            list.push_back(inlist);
            inlist.clear();
        }
    }
    return list;
}
  • 分层遍历打印邻接表

void BFSprint(LGraph g, void(Visit)(Vertex),int v)
{
    queue<int> q;
    q.push(v);
    Visited[v] = true;
    int last = v;
    AdjVNode * temp = NULL;
    while (!q.empty())
    {
        v =q.front() ;
        q.pop();
        Visit(v);
        temp = g->G[v].FirstEdge;
        while (temp!=NULL)
        {
            if (Visited[temp->AdjV] == false)
            {
                q.push(temp->AdjV);
                Visited[temp->AdjV] = true;
            }
            temp = temp->Next;
        }
        if (last == v&&!q.empty())
        {
            last = q.back();
            cout << endl;
        }
    }


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,849评论 0 19
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,383评论 0 3
  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 6,558评论 0 14
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,415评论 0 25
  • 曾经,我们总以为时间还很长,我们可以做的事还很多。可慢慢的才发现,一切都在悄然离去,而我们却没有去珍惜。珍惜二字,...
    f1adc8151072阅读 215评论 0 0