剑指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); } }
拓展思路
不管是广度优先遍历一个有向图还是一棵树, 都要用到队列。 第一步我们把起始结点( 对树而言是根结点 ) 放入队列中. 接下来每一次从队列
的头部取出一个结点, 遍历这个结点之后把从它能到达的结点( 对树而言
是子结点 ) 都依次放入队列. 我们重复这个遍历过程, 直到队列中的结点
全部被遍历为止。
相关文章推荐
- 【剑指Offer学习】【面试题23:从上往下打印二叉树】
- 剑指offer——从上往下打印二叉树
- 剑指offer: 从上往下打印二叉树(树)
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- 剑指Offer:面试题23 从上往下打印二叉树
- 剑指offer:从上往下打印二叉树
- 剑指Offer:从上往下打印二叉树
- 剑指offer-4-面试23:从上往下打印二叉树
- 剑指offer 从上往下打印二叉树
- 剑指offer_从上往下打印二叉树
- 剑指offer-面试题23:从上往下打印二叉树
- 剑指offer代码解析——面试题23从上往下打印二叉树
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- 【剑指Offer】从上往下打印二叉树
- 剑指offer面试题23-从上往下打印二叉树
- 剑指Offer------从上往下打印二叉树(层序遍历)
- 码农小汪-剑指Offer之20-从上往下打印二叉树
- 剑指Offer学习总结-重建二叉树
- 剑指offer 从上往下打印出二叉树的每个节点
- 剑指offer代码解析——面试题23从上往下打印二叉树