题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印到一行。
分析:为了把二叉树的每一行单独打印到一行里,我们需要两个变量:一个变量表示在当前层中还没有打印的结点数,另一个变量表示下一层结点的数目。
struct BinaryTreeNode{
int value;
struct BinaryTreeNode *left;
struct BinaryTreeNode *right;
};
void Print(BinaryTreeNode* pRoot)
{
if (pRoot == NULL)return;
queue<BinaryTreeNode *> nodes;
nodes.push(pRoot);
int nextLevel = 0; //保存下一层结点的数目
int toBePrinted = 1; //表示当前层中还没有打印的节点数
while (!nodes.empty())
{
BinaryTreeNode *pNode = nodes.front();
cout<<pNode->value<<" ";
if (pNode->left != NULL)
{
nodes.push(pNode->left);
++nextLevel;
}
if (pNode->right != NULL)
{
nodes.push(pNode->right);
++nextLevel;
}
nodes.pop();
--toBePrinted;
if (toBePrinted == 0)
{
cout<<endl;
toBePrinted = nextLevel;
nextLevel = 0;
}
}
}