在几次笔试的过程中,都提到了二叉树层序遍历 ,那么我就好好整理下
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。
例如输入:
8
/ \
6 10
/\ /\
5 7 9 11
输出8 6 10 5 7 9 11。
二叉树节点定义:
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode *m_pLeft;
BinaryTreeNode *m_pRight;
};
从上到下打印思想:
每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。
void PrintTop_to_Bottom(BinaryTreeNode* pRoot)
{
assert(NULL != pRoot);
std::queue<BinaryTreeNode* > order;
order.push(pRoot);
while (!order.empty())
{
BinaryTreeNode* pnode = order.front();
order.pop();
cout << pnode->data << " ";
if (pnode->pLeft)
order.push(pnode->pLeft);
if (pnode->pRight)
order.push(pnode->pRight);
}
}