64:Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:人生的意义 知乎 编辑:程序博客网 时间:2024/06/17 05:21
题目: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]
]
该题目同样也只需要在 level order 基础上逆序,但这时候是有条件的逆序
递归版本如下:
// 递归版本,时间复杂度 O(n)class Solution {public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> result; traverse(root, 1, result); for (int i = 0; i != result.size(); ++i) if (i % 2 != 0) reverse(result[i].begin(), result[i].end()); return result; }private: void traverse(TreeNode* root, int level, vector<vector<int>>& result) { if (!root) return; if (level > result.size()) result.push_back(vector<int>()); result[level - 1].push_back(root -> val); traverse(root -> left, level + 1, result); traverse(root -> right, level + 1, result); }};
迭代版本如下:
// 迭代版本,时间复杂度 O(n),空间复杂度 O(n)class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> result; queue<TreeNode*> q1, q2; TreeNode* cur = root; if (cur != nullptr) q1.push(cur); while (true) { if (q1.empty()) break; vector<int> tmp; while (!q1.empty()) { cur = q1.front(); q1.pop(); tmp.push_back(q1 -> val); if (cur -> left != nullptr) q2.push(cur -> left); if (cur -> right != nullptr) q2.push(cur -> right); } result.push_back(true); while (!q2.empty()) { q1.push(q2.front()); q2.pop(); } } for (int i = 0; i != result.size(); ++i) if (i % 2 != 0) reverse(result[i].begin(), result[i].end()); return result; }};
0 0
- 64: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
- Binary Tree Zigzag Level Order Traversal
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- 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
- Binary Tree Zigzag Level Order Traversal
- Openwrt学习笔记(四)——系统开机启动 (续)
- React 笔记1:Installation & HelloWorld
- Ubuntu下安装mysql数据库
- LeetCode(2)
- 如何看待技术学习
- 64:Binary Tree Zigzag Level Order Traversal
- 排序问题2
- AndResGuard资源混肴
- MySQL5.7.17 编译安装及二进制安装详解
- Leetcode 79. Word Search 要真正理解回溯的写法!
- modprobe drdb FATAL: Module drdb not found
- APP开发实战158-局部广播(Local Broadcast)
- Android性能优化(一)--关于内存溢出
- How to Run a Shell Script with Mac App Sandbox Enabled