• 从上往下打印二叉树


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

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

            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)直到队列为空

  • 相关阅读:
    NHibernate源码分析
    jQuery插件:跨浏览器复制jQuery-zclip
    NHibernate入门实例
    NHibernate系列之一--刘东
    关于登陆窗口的关闭、传值
    java 内部类 多线程
    插入时排序
    按某些字段排序数据
    获取顺序排列
    Oracle数组类型
  • 原文地址:https://www.cnblogs.com/menghuizuotian/p/3789849.html
Copyright © 2020-2023  润新知