题目:
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] ]
解题思路:
深度优先遍历
代码:
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 11 class Solution { 12 public: 13 vector<vector<int> > zigzagLevelOrder(TreeNode *root) { 14 vector<vector<int>> ans; 15 if (root == NULL) return ans; 16 17 vector<TreeNode *> one, another; 18 one.push_back(root); 19 20 while (!one.empty() || !another.empty()) { 21 if (!one.empty()) { 22 vector<int> cur_ans; 23 TreeNode * node = NULL; 24 for (int i = 0; i < one.size(); i++) { 25 node = one[i]; 26 cur_ans.push_back(node->val); 27 if (node->left) another.push_back(node->left); 28 if (node->right) another.push_back(node->right); 29 } 30 ans.push_back(cur_ans); 31 one.clear(); 32 } 33 if (!another.empty()) { 34 vector<int> cur_ans; 35 TreeNode * node = NULL; 36 for (int i = 0; i < another.size(); i++) { 37 node = another[i]; 38 cur_ans.push_back(node->val); 39 if (node->left) one.push_back(node->left); 40 if (node->right) one.push_back(node->right); 41 } 42 reverse(cur_ans.begin(), cur_ans.end()); 43 ans.push_back(cur_ans); 44 another.clear(); 45 } 46 } 47 return ans; 48 } 49 };