leecode 解题总结:103. Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:windows 8.1-32位 编辑:程序博客网 时间:2024/06/17 05:58
#include <iostream>#include <stdio.h>#include <vector>#include <queue>using namespace std;/*问题: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,null,null,15,7], 3 / \ 9 20 / \ 15 7return its zigzag level order traversal as:[ [3], [20,9], [15,7]]分析:此题是在之前层序遍历的基础上修改为z型方向遍历,即从左到右,从右到左,然后从左到右这种难点在于如何修改遍历的顺序,队列先进先出。一种简单的方法是:举例: 1 2 3 4 5 6 7 8 9 10 11 14 13 12 那么结果是: [1], [3,2] [4,5,6,7] 也就是说:第一行是顺序,第2行是逆序,第3行是顺序,第4行数逆序,。。。 关键: 1 第奇数行是顺序,第偶数行是逆序,仍然用队列+层序遍历方式, 只不过生成结果后,如果当前是第偶数行,就需要将该行结果逆置*/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>> results; if(!root){return results;}queue<TreeNode*> nodes;nodes.push(root);int size = 1;int nextSize = 0;vector<int> result;TreeNode* node;int level = 1;while(!nodes.empty()){node = nodes.front();nodes.pop();result.push_back(node->val);if(node->left){nodes.push(node->left);nextSize += 1;}if(node->right){nodes.push(node->right);nextSize += 1;}size--;if(0 == size){size = nextSize;nextSize = 0;vector<int> tempResult(result);//如果当前层数是奇数,需要逆置if((level & 1) == 0){reverse(tempResult.begin() , tempResult.end());}level++;//层数要累加results.push_back(tempResult);result.clear();}}return results; }};void print(vector<int>& result){if(result.empty()){cout << "no result" << endl;return;}int size = result.size();for(int i = 0 ; i < size ; i++){cout << result.at(i) << " " ;}cout << endl;}void process(){ vector<int> nums; int value; int num; Solution solution; vector<int> result; while(cin >> num ) { nums.clear(); for(int i = 0 ; i < num ; i++) { cin >> value; nums.push_back(value); } }}int main(int argc , char* argv[]){process();getchar();return 0;}
0 0
- leecode 解题总结:103. Binary Tree Zigzag Level Order Traversal
- leecode 解题总结:102. Binary Tree Level Order Traversal
- leecode 解题总结:107. Binary Tree Level Order Traversal II
- [leetcode] 103. Binary Tree Zigzag Level Order Traversal 解题报告
- 【LeetCode】103. Binary Tree Zigzag Level Order Traversal 解题报告
- [Leetcode] 103. Binary Tree Zigzag Level Order Traversal 解题报告
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 跟我学STM32107RC--- STM32中assert_param的使用
- 2017 WHUWT Day2 (Div. 2) (图论算法 //待更新
- stm32-串口
- 1075. PAT Judge (25)
- 21.ACL 的使用
- leecode 解题总结:103. Binary Tree Zigzag Level Order Traversal
- 几种绳子打结的方法 - T爸写给小T的书
- 【android studio】根本解决layout预览出现Rendering Problems Exception Unable to find the layout for Action Bar.
- 杭州某B2B软件公司面试题
- Android AS File Header java 文件创建时候的头文件
- Android 5.0 startService的启动流程最全面的分析
- Android单元测试-Junit
- Android TV 相关
- 查询build.gradle中用到的依赖库的写法