力扣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 };

 

posted on 2025-02-24 21:36  Coder何  阅读(14)  评论(0)    收藏  举报