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
原创粉丝点击