-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathBinary_Tree_Zigzag_Level_Order_Traversal.cpp
More file actions
80 lines (71 loc) · 1.83 KB
/
Copy pathBinary_Tree_Zigzag_Level_Order_Traversal.cpp
File metadata and controls
80 lines (71 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
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).
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]
]
*/
#include <vector>
#include <queue>
#include <algorithm>
#include "lintcode.h"
using namespace std;
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
* @param root: The root of binary tree.
* @return: A list of lists of integer include
* the zigzag level order traversal of its nodes' values
*/
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
// write your code here
vector<vector<int>> result;
queue<TreeNode*> myQueue;
if (root) {
myQueue.push(root);
}
bool zigzag = false;
while (!myQueue.empty()) {
vector<int> currentLevel;
int size = myQueue.size();
for (int i = 0; i < size; i++) {
TreeNode* current = myQueue.front();
myQueue.pop();
currentLevel.push_back(current->val);
if (current->left) {
myQueue.push(current->left);
}
if (current->right) {
myQueue.push(current->right);
}
}
if (zigzag) {
reverse(currentLevel.begin(), currentLevel.end());
}
zigzag = !zigzag;
result.push_back(currentLevel);
}
return result;
}
};