码迷,mamicode.com
首页 > 其他好文 > 详细

从上往下打印二叉树

时间:2014-06-18 22:56:51      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   color      

题目:从上往下打印出二叉树的每个结点,从一层的结点按照从左往右的顺序打印。

分析:类似于宽度优先搜索。可以采用队列来实现。     

        8

    6    10

5   7  9   11

依次打印:8,6,10,5,7,9,11

首先我们获得根节点,每次打印根节点后,接下来就打印它的左右子树,如上图,先将8压入容器,接下来出队列,并将根节点6、10压入容器,接下来再打印6,并将6的左右子树5、7压入容器,此时由于10先如队列的所以先打印10(同样会将左右字数9、11压入队列),再打印后来进去的5、7.。。

typedef char ElemType;

struct BinTree{
   ElemType m_root;
   BinTree *m_left;
   BinTree *m_right;
};
void PrintBinTree(const BinTree *pTreeRoot)
{
    if(!pTreeRoot)
        return;
    deque<BinTree *> dequeBinTree;                 //定义一个存储树结点的队列
    dequeBinTree.push_back(pTreeRoot);
    while(dequeBinTree.size())
    {
        BinTree *pNode=dequeBinTree.front();           //获得定点并打印
        cout<<pNode->m_root<<"  ";
        dequeBinTree.pop_front();                      //出队列,pop_front() //删除链表头的一元素
        if (pNode->m_left)
            dequeBinTree.push_back(pNode->m_left);
        if(pNode->m_right)
        dequeBinTree.push_back(pNode->m_right);
    }
}

 步骤总结:

1)把结点放入队列中

2)从队列头部取出结点,打印这个结点后将这个节点所能达到的结点依次从队尾放入队列中

3)重复1)、2)直到队列为空

从上往下打印二叉树,布布扣,bubuko.com

从上往下打印二叉树

标签:style   class   blog   code   color      

原文地址:http://www.cnblogs.com/menghuizuotian/p/3789849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!