平面设计和网站建设哪个好,wordpress文章内模板,唐山网站制作工具,怎么查看网站的备案号广度优先搜索
思路#xff1a; 需要逐层遍历结果#xff0c;通过广度优先搜索即可#xff1b; 使用 queue#xff0c;初始将 root push 进入 queue#xff1b;逐层搜索#xff0c;直到 queue 为空#xff1b; queue 里为当前层节点元素#xff0c;一次循环处理#x…广度优先搜索
思路 需要逐层遍历结果通过广度优先搜索即可 使用 queue初始将 root push 进入 queue逐层搜索直到 queue 为空 queue 里为当前层节点元素一次循环处理 取 queue front 元素之后 pop 丢弃拿到元素之后根据需求进行处理将当前节点左右节点如果存在的话压入队列作为下一层每一层需要调换顺序遍历节点可以使用一个变量来记录当前顺序第一层root从左往右后续每遍历完一层之后变换一次顺序遍历的节点需要根据顺序进行反转可以使用一个双端队列 deque 来存储遍历完之后再转成 vector
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vectorvectorint zigzagLevelOrder(TreeNode* root) {std::vectorstd::vectorint result;if (nullptr root) {return result;}std::queueTreeNode* qu;qu.push(root);bool isOrderLeft true;while (!qu.empty()) {std::dequeint levelList;int size qu.size();for (int i 0; i size; i) {auto node qu.front();qu.pop();if (isOrderLeft) {levelList.push_back(node-val);} else {levelList.push_front(node-val);}if (node-left) {qu.push(node-left);}if (node-right) {qu.push(node-right);}}result.emplace_back(std::vectorint{levelList.begin(), levelList.end()});isOrderLeft !isOrderLeft;}return result;}
};