剑指offer-按之字形顺序打印二叉树
来源:互联网 发布:易特进销存软件商贸版 编辑:程序博客网 时间:2024/06/04 00:53
问题
题目:[剑指offer-按之字形顺序打印二叉树]
思路
这个题的本质是返回每一层的节点,关键是增加每一层的最右侧节点作为标记。如果指针到达这个节点,那么证明此时队列里面的都是下一层的节点。关键是为什么不会有下下层的节点,因为现在访问到last,最多生成下一层的节点,不会有下下层。所以,此时队列中最后一个节点就是下一层的last.
代码
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/struct element { TreeNode* p; int level;};class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> ret; if(!pRoot) return ret; element e; e.p = pRoot; e.level = 1; TreeNode* last = pRoot; // 每一层最右侧节点 int cur = 2; std::queue<element> que; que.push(e); vector<int> line; while( !que.empty() ){ e = que.front(); que.pop(); line.push_back( e.p->val ); if( e.p->left ){ element tmp; tmp.p = e.p->left; tmp.level = cur; que.push(tmp); } if( e.p->right ){ element tmp; tmp.p = e.p->right; tmp.level = cur; que.push(tmp); } if( e.p == last ){ if( e.level % 2 == 1 ) ret.push_back(line); else{ reverse( line.begin(), line.end() ); ret.push_back(line); } line.clear(); ++cur; last = que.back().p; } } return ret; }};
阅读全文
0 0
- 剑指offer--按之字形顺序打印二叉树
- 《剑指offer》按之字形顺序打印二叉树
- 剑指offer—按之字形顺序打印二叉树
- 《剑指offer》——按之字形顺序打印二叉树
- 剑指offer:按之字形顺序打印二叉树
- 剑指offer:按之字形顺序打印二叉树
- [剑指offer]按之字形顺序打印二叉树
- 剑指offer(五十三)之按之字形顺序打印二叉树
- 剑指Offer--061-按之字形顺序打印二叉树
- 《剑指offer》:[61]按之字形顺序打印二叉树
- 剑指offer(56)-按之字形顺序打印二叉树
- 剑指offer——按之字形顺序打印二叉树
- 剑指offer|按之字形顺序打印二叉树
- 剑指offer-按之字形顺序打印二叉树
- 剑指offer-----按之字形顺序打印二叉树(java版)
- 【剑指Offer】按之字形顺序打印二叉树
- 剑指offer-按之字形顺序打印二叉树-php
- 剑指offer-59.按之字形顺序打印二叉树
- 棋盘问题
- 区间第k大值(主席树入门)
- 几个好用的软件
- 系统延时及定时任务
- I
- 剑指offer-按之字形顺序打印二叉树
- RHEL7 的网卡命名规则
- Java系统性整理
- Python日志8/1
- 常用排序算法性能比较
- bash学习:变量的删除,替代与替换
- 2017-8-1
- 线性表的顺序存储结构的表示和实现
- jQuery基础(3)