您的位置:首页 > 职场人生

【剑指offer】面试题23:从上往下打印二叉树

2017-03-09 01:09 267 查看
题目:从上往下打印二叉树的每个结点,同一层的结点按照从左往右的顺序打印。

思路:我们可以用一个队列来保存我们当前结点的左右子树,然后进行出队分别访问左右子树结点,进行打印。

#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);

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: