您的位置:首页 > Web前端

剑指Offer学习总结-从上往下打印二叉树

2018-01-22 14:40 288 查看

剑指Offer学习总结-从上往下打印二叉树

本系列为剑指Offer学习总结,主要是代码案例的分析和实现:

书籍链接:http://product.dangdang.com/24242724.html

原作者博客:http://zhedahht.blog.163.com/blog/static/254111742011101624433132/

原作者博客链接有完整的项目代码下载。

从上往下打印二叉树

题目

题目:从上往下打印出二叉树的每个结点, 同一层的结点按照从左致

右的顺序打印

例如输入图中的二叉树, 则依次打印出 8、 6、 10、 5、 7、 9、 11

二叉树的节点定义如下:

struct BinaryTreeNode
{
int                    m_nValue;
BinaryTreeNode*        m_pLeft;
BinaryTreeNode*        m_pRight;
};




常规的解法:

从上到下遍历,又称二叉树的层级遍历。二叉树的层级遍历,我们需要利用到队列结构。



使用队列的代码

void PrintFromTopToBottom(BinaryTreeNode* pRoot)
{
if(pRoot == NULL)
return;
//利用的队列
std::deque<BinaryTreeNode *> dequeTreeNode;

dequeTreeNode.push_back(pRoot);

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->m_pRight);
}
}


拓展思路

不管是广度优先遍历一个有向图还是一棵树, 都要用到队列。 第一步

我们把起始结点( 对树而言是根结点 ) 放入队列中. 接下来每一次从队列

的头部取出一个结点, 遍历这个结点之后把从它能到达的结点( 对树而言

是子结点 ) 都依次放入队列. 我们重复这个遍历过程, 直到队列中的结点

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