题目:从上往下打印二叉树的每个结点,同一层的结点按照从左往右的顺序打印。
思路:我们可以用一个队列来保存我们当前结点的左右子树,然后进行出队分别访问左右子树结点,进行打印。
#include<iostream>
#include<deque>
using namespace std;
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode * m_pRight;
};
void PrintFromTopToBottom(BinaryTreeNode* pTreeNode)
{
if (pTreeNode == NULL)
{
return;
}
//创建队列,将当前的结点的左右孩子指针分别放到容器中,方便使用
std::deque<BinaryTreeNode*>dequeTreeNode;
dequeTreeNode.push_back(pTreeNode);
//我们用队列来解决按层进行打印,也就是我们不需递归,每从队列中取出要打印的结点,并且把该节点的左右子结点保存到队列中即可
while (dequeTreeNode.size())
{
BinaryTreeNode* pNode = dequeTreeNode.front();
printf("%d ", pNode->m_nValue);
//该节点打印完后,我们进行弹出
dequeTreeNode.pop_front();
if (pNode->m_pLeft)
{
dequeTreeNode.push_back(pNode->m_pLeft);
}
if (pNode->m_pRight)
{
dequeTreeNode.push_back(pNode->m_pRight);
}
}
}