标签:binary 双端队列 root 形式 需要 rgb public size 相同
仅供自己学习
思路:
前面做过102,题目几乎相同,只是输出的方式不同,下意识BFS就选择了队列,但是发现不能解决,因为是单向取单向入得结构,不能从满足一左一右的输出形式。上课的时候了解到一个双端队列,刚好可以满足,只需要一个标记此时是左输出还是右输出即可。当时只想用一个双端队列即可,但是发现写着还是会有一堆bug,例如从后面取,但是新元素也往后面加入,那么就会有冲突。于是就在用一个队列来辅助,队列只用来暂时存储元素,而双端队列就用来决定队列里的元素是从后面加入还是前面加入。当我们从左输出,那么我们队列就从双端队列后面入队,从右输出那么就从双端队列前面入队。
代码:
1 /** 2 * Definition for a binary tree node. 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 class Solution { 11 public: 12 vector<vector<int>> zigzagLevelOrder(TreeNode* root) { 13 if(root==NULL) return {}; 14 queue <TreeNode*> q1; 15 q1.push(root); 16 vector<vector<int>> res; 17 int tag=1; 18 while(!q1.empty()){ 19 deque <int> q; 20 int size=q1.size(); 21 while(size--){ 22 TreeNode* temp=q1.front(); 23 q1.pop(); 24 if(tag==1) q.push_back(temp->val); 25 else q.push_front(temp->val); 26 if(temp->left) q1.push(temp->left); 27 if(temp->right) q1.push(temp->right); 28 } 29 tag=!tag; 30 res.emplace_back(vector<int>{q.begin(), q.end()}); 31 32 } 33 return res; 34 } 35 };
103. Binary Tree Zigzag Level Order Traversal
标签:binary 双端队列 root 形式 需要 rgb public size 相同
原文地址:https://www.cnblogs.com/Mrsdwang/p/14408002.html