题目:从上而下打印出二叉树的每个节点,同一层的结点按照从左往右的顺序打印。二叉树结点定义如下:
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
}
分析:就是二叉树的按层遍历,即广度优先遍历。利用队列进行编程。每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。接下来到队列的头部去除最早放入队列的结点,重复前面的操作,直至队列中所有节点都被打印出来为止。
实现如下:
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->mpRight);
}
}
转载于:https://blog.51cto.com/secondscript/1585197