[LeetCode]Binary Tree Zigzag Level Order Traversal
2015-11-30 14:42
429 查看
题目解析:(链接)
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
return its zigzag level order traversal as:
confused what
解题思路:
递归版:
迭代版:
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.
解题思路:
递归版:
/** * Definition for a binary tree node. * 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) { travel(root, 1); bool flag = false; for (auto &i : result) { if (flag) { reverse(i.begin(), i.end()); } flag = !flag; } return result; } void travel(TreeNode *root, int level) { if (!root) return; if (level > result.size()) { result.push_back(vector<int>()); } result[level - 1].push_back(root->val); travel(root->left, level + 1); travel(root->right, level + 1); } private: vector<vector<int>> result; };
迭代版:
/** * Definition for a binary tree node. * 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>> result; if (!root) return result; queue<TreeNode *> current, next; vector<int> level; current.push(root); while (!current.empty()) { while(!current.empty()) { TreeNode *tmp = current.front(); current.pop(); level.push_back(tmp->val); if (tmp->left != nullptr) next.push(tmp->left); if (tmp->right != nullptr) next.push(tmp->right); } result.push_back(level); level.clear(); swap(current, next); } bool flag = false; for (auto &i : result) { if (flag) { reverse(i.begin(), i.end()); } flag = !flag; } return result; } };
相关文章推荐
- Zookeeper Watch机制
- Oracle 10g设置IP访问限制
- [Objective-C]__bridge,__bridge_retained和__bridge_t
- 彻底理解position与anchorPoint
- DM8168成功接受网络摄像机码流1080P总结
- ios手势
- 免费的智能问答机器人api 和机器人对话
- 欢迎使用CSDN-markdown编辑器
- LSA概述与实例
- android 控件 获取 position
- Java宝典(面试加笔记)
- 单片机控制数码管
- windows建立隐藏账户
- Android编程之SparseArray<E>详解
- shell用if
- Java安全通信:HTTPS与SSL
- android中的layoutparams参数使用的简单总结
- iOS 9音频应用播放音频之音量设置与声道设置
- PHP定界符
- set run config