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