题目:
从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。二叉树结点定义如下:
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
按层打印的顺序决定应该先打印根结点,所以从树的根结点开始分析。同时为了能够打印根结点的子结点,在遍历到根结点时,就应该把它的两个子结点入队,依次下去。即每一次打印一个结点时,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有结点都被打印出来。
void PrintFromTopBottom(BinaryTreeNode* pTreeRoot)
{
if(!pTreeRoot)
return;
std::deque<BinaryTreeNode *>dequeTreeNode;
//push_back(x):把元素x插入带双向队列的尾部
dequeTreeNode.push_back(pTreeRoot);
while(dequeTreeNode.size())
{
//front():返回第一个元素的引用
BinaryTreeNode *pNode=dequeTreeNode.front();
//pop_front():弹出双向队列的第一个元素
dequeTreeNodde.pop_front();
cout<<pNode->m_nValue;
if(pNode->m_pLeft)
dequeTreeNode.push_back(pNode->m_pLeft);
if(pNode->m_pRight)
dequeTreeNode.push_back(pNode->m_pRight);
}
}