二叉树的分层打印(一)

原创 2016年06月01日 19:28:05

题目:给定一颗二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一行要求访问的顺序是从左到右。

分析:我们已经探讨过“二叉树的层序遍历”,在此基础上,我们稍作修改即可,具体实现如下:

#include <iostream>
using namespace std;
#include <deque>

typedef struct node
{
    char data;
    struct node *lchild;
    struct node *rchild;
}BiNode, *BiTree;


// 先序建立二叉树 (输入时,按先序次序输入二叉树中结点的值,以 # 字符表示空树)
BiTree createBiTree()
{
    BiTree T;

    char c;
    scanf("%c", &c);

    if (c == '#')
        T = NULL;
    else
    {
        T = new BiNode;  // 或 T = (BiTree)malloc(sizeof(BiNode));
        T->data = c;

        T->lchild = createBiTree();
        T->rchild = createBiTree();
    }

    return T;

}

// 二叉树的分层打印
void PrintTreeByLevel1(BiTree T)
{
    if(T == NULL) return;

    deque<BiTree> q;
    q.push_back(T);

    int curLevelNum; // 当前层的节点数

    while (q.size())
    {
        curLevelNum = (int)q.size(); // 此处要做类型转换,因为size()返回值为size_type类型;
        while(curLevelNum-- > 0) // 一直访问到当前层的最后一个节点
        {
            BiTree tmp = q.front();

            q.pop_front();
            printf("%c ", tmp->data);

            if(tmp->lchild)
                q.push_back(tmp->lchild);
            if(tmp->rchild)
                q.push_back(tmp->rchild);
        }
        printf("\n"); // 当前层的元素输出完毕后,换行;
    }
}


int main(int argc, const char * argv[]) {

    BiTree T = createBiTree(); // 建立

    PrintTreeByLevel(T); // 分层打印

    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

打印一棵二叉树,要求从上往下打印,每一层从左往右打印

思路:在二叉树的遍历中,用得最多的就是递归,二叉树的先序、中序、后序遍历都可以用递归实现,但是这里却要使用另外一种方式解决。利用队列先入先出的特性,我们先把二叉树每一层的节点按从左往右的顺序加入队列,...
  • zx582727090
  • zx582727090
  • 2016年08月02日 15:24
  • 615

分层打印二叉树--Java实现

前言啊:工作几年了,但以前大学学的算法都快忘完了。趁着准备换工作的时间准备把算法给捡起来,因为毕业后用的编程语言是Java所以准备都用Java语言来实现。 要求:有如下的二叉树,请写出一算法实现分层...
  • caonuoqi
  • caonuoqi
  • 2017年05月01日 15:12
  • 698

按层次方式打印二叉树

给定一个二叉树,以层次方式打印各层元素,如下。用到广度优先遍历。以广度优先,就是说一层层地打印,这样,先入的就先打印,所以用到的数据据结构是队列。而深度优先,则是先遍历完一个分支才进行第二个分支,用的...
  • tianyi1991
  • tianyi1991
  • 2015年07月28日 10:58
  • 945

二叉树的层次遍历,从上到下和从下到上分层打印

用queue和vector都可以实现层次遍历
  • lzx_2011
  • lzx_2011
  • 2014年04月26日 22:07
  • 2373

从上往下分层打印二叉树

题目地址:http://ac.jobdu.com/problem.php?pid=1523题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 输入: 输入可能包含多个测试样例,...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2013年12月30日 13:32
  • 1574

设计一个算法,按照层次打印这棵二叉树。

有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。...
  • zhangtian6691844
  • zhangtian6691844
  • 2016年08月21日 22:45
  • 862

二叉树按层遍历打印的算法(c/c++)

void LevelOrder(BTree T, int cnt) { BTree level = malloc(sizeof(struct BTNode)*cnt); if(leve...
  • zhuisui8
  • zhuisui8
  • 2016年10月30日 16:15
  • 166

二叉树按层遍历打印换行

我们都知道,广度优先遍历——对二叉树来说就是按层遍历,需要借助队列。代码也很简单,就几行。但是为什么要借助队列呢? 粗鲁分析: 二叉树的按层遍历是这样:从左到右,从上到下访问每个节点。 而二叉树本...
  • u010292561
  • u010292561
  • 2017年08月24日 10:18
  • 160

分层打印二叉树

问题: 把一个二叉树,安装从root到leaf的顺序把每一层上的node从左到右打印出来。 分析: 利用两个arraylist,一个arraylist装上一层的node, 另一个arra...
  • beiyetengqing
  • beiyetengqing
  • 2012年06月04日 10:29
  • 721

二叉树的分层打印(二)

在上一篇文章“二叉树的分层打印(一)”中,已经实现了二叉树的分层打印,本文讲述了其他的实现方式。思路分析: 如果只是分层遍历二叉树并打印出所有元素,那么使用队列来实现BFS是最好的选择。 ...
  • cyuyanenen
  • cyuyanenen
  • 2016年06月01日 21:40
  • 252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树的分层打印(一)
举报原因:
原因补充:

(最多只允许输入30个字)