题目:
从上往下打印出二叉树的每一个结点,同一层的结点按照从左到右的顺序打印。例如输入下图的二叉树,则依次打印出8、6、10、5、7、9、11。
分析:
从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。
代码:
void
PrintFromTopToBottom(BinaryTreeNode *pTreeRoot)
{
if
(!pTreeRoot)
return
;
std::deque<BinaryTreeNode*> dequeTreeNode;
dequeTreeNode.push_back(pTreeRoot); //根结点入队
while
(dequeTreeNode.size())
{
BinaryTreeNode *pNode = dequeTreeNode.front();
dequeTreeNode.pop_front(); //出队
printf
(
"%d "
, pNode->m_nValue);
if
(pNode->m_pLeft) //如果有左右孩子结点,则按顺序入队
dequeTreeNode.push_back(pNode->m_pLeft);
if
(pNode->m_pRight)
dequeTreeNode.push_back(pNode->m_pRight);
}
}