[C++]LeetCode: 101 Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:稳定排序算法有哪些 编辑:程序博客网 时间:2024/05/17 10:42
题目:
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7]]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
思路:这道题的解法和思路和Binary Tree Level Order Traversal差不多,只不过我们需要设个标志位来区分,这行是正序还是反序输出数组。我们利用队列来存储树的节点,并用NULL来区分每一行,记得当队列非空时,处理完每一行,都需要清空level数组,并加入NULL,区别下一行。我们设置tag, tag为True,表示正序,从左到右输出数组,tag为false, 表示反序,从右往左输出数组。
Attention:
1. 记得处理完每一行后,当队列非空时,清空数组level, 并且往队列中加入NULL,区分下一行。
2. reverse的用法
void reverse (BidirectionalIterator first, BidirectionalIterator last);
std::reverse(myvector.begin(),myvector.end());
3. 用tag来区分输出顺序。记得每次都需要tag取反,下次是反方向。if(tag) { ret.push_back(level); } else { reverse(level.begin(), level.end()); ret.push_back(level); } tag = !tag;
复杂度:O(N),N为树的节点个数。
AC Code:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { vector<vector<int>> ret; if(root == NULL) return ret; vector<int> level; bool tag = true; queue<TreeNode*> TreeQ; TreeQ.push(root); TreeQ.push(NULL); //区分分层 while(!TreeQ.empty()) { TreeNode* node = TreeQ.front(); TreeQ.pop(); if(node != NULL) { level.push_back(node->val); if(node->left) TreeQ.push(node->left); if(node->right) TreeQ.push(node->right); } else { if(tag) { ret.push_back(level); } else { reverse(level.begin(), level.end()); ret.push_back(level); } tag = !tag; if(!TreeQ.empty()) { level.clear(); TreeQ.push(NULL); } } } return ret; }};
0 0
- [C++]LeetCode: 101 Binary Tree Zigzag Level Order Traversal
- LeetCode: Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- [Leetcode]Binary Tree Zigzag Level Order Traversal
- [leetcode]Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode-Binary Tree Zigzag Level Order Traversal
- [leetcode] Binary Tree Zigzag Level Order Traversal
- LeetCode - Binary Tree Zigzag Level Order Traversal
- LeetCode:Binary Tree Zigzag Level Order Traversal
- 关于nand flash 特殊 features的一点点
- Android中shape的使用
- 使用Python进行自动化测试
- Ehcache中Cache预热机制
- 云计算的基本概念
- [C++]LeetCode: 101 Binary Tree Zigzag Level Order Traversal
- C# 位域[flags]
- C/S和B/S架构的网络系统各有哪些优势?
- C# 窗体之间传值方法汇总
- 仿91助手的PC与android手机通讯(1) --- 检测设备插入
- 获取一个文件夹下的一级目录
- 获取一个文件夹下的一级目录
- 由浅入深了解Thrift(一)——Thrift介绍与用法
- Shanghai Job: Senior Android Engineer 高级安卓工程师