力扣103. 二叉树的锯齿形层序遍历(BFS)

切记不能在层序遍历的过程中修改左右次序,不然会导致遍历的结构错误。
该题只需照常层序遍历,在最后输出的结果的时候改变方向即可
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 vector<vector<int>> zigzagLevelOrder(TreeNode* root) { 15 vector<vector<int>> result; 16 vector<TreeNode*> queue; 17 unordered_map<TreeNode*, bool> visited; 18 queue.push_back(root); 19 bool flag = true; 20 vector<int> nodes; 21 while(!queue.empty()) { 22 int length = queue.size(); 23 nodes.clear(); 24 for (int i = 0; i < length; ++i) { 25 if (queue[i] && !visited[queue[i]]) { 26 visited[queue[i]] = true; 27 nodes.push_back(queue[i] -> val); 28 if (queue[i] -> left) { 29 queue.push_back(queue[i] -> left); 30 } 31 if (queue[i] -> right) { 32 queue.push_back(queue[i] -> right); 33 } 34 } 35 } 36 if (!nodes.empty()) { 37 if (!flag) reverse(nodes.begin(), nodes.end()); //仅在输出时改变方向 38 result.push_back(nodes); 39 } 40 queue.erase(queue.begin(), queue.begin() + length); 41 flag = !flag; 42 } 43 return result; 44 } 45 };
浙公网安备 33010602011771号