剑指offer之分行从上到下打印二叉树

1.问题描述

题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。

2.分析

上一篇已经分析了不分层打印,至于如何分层打印。其实挺简单,只需要两个变量,一个保存当前层需要打印节点数,一个保存下一层需要打印节点数。

3.源代码:

void PrintFromTopToBottom(BinaryTreeNode* pRoot)
{
    if(pRoot == nullptr)
        return;

    std::queue<BinaryTreeNode *> queueTreeNode;
    queueTreeNode.push(pRoot);

    //下一层节点数目
    int nextNodes = 0;
    //当前层节点
    int levelNodes = 1;

    while(queueTreeNode.size())
    {
        BinaryTreeNode* pNode = queueTreeNode.front();
        queueTreeNode.pop();


        //节点为空,空指针,则不要访问Node的左右节点
        if(pNode == nullptr)
        {
            cout << "nullptr ";
        }
        else
            cout << pNode->m_nValue <<" ";



        //如果为叶子节点,则也不访问
        if(pNode != nullptr)
        {
            if(!(pNode->m_pLeft == nullptr && pNode->m_pRight == nullptr))
            {
                queueTreeNode.push(pNode->m_pLeft);
                queueTreeNode.push(pNode->m_pRight);
                nextNodes +=2;
            }
        }


        --levelNodes;
        if(levelNodes == 0)
        {
            cout<<endl;
            levelNodes = nextNodes;
            nextNodes = 0;
        }
    }
}

对于例子:

//               5
//              /
//             4
//            /
//           3
//          /
//         2
//        /
//       1

打印出来结果是:

5
4 nullptr
3 nullptr
2 nullptr
1 nullptr

猜你喜欢

转载自blog.csdn.net/zqw_yaomin/article/details/81781071