题目来源:
leetcode题目,网址:103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode)
解题思路:
每一层从左到右遍历,逐一判断是否需要反转。
解题代码:
/*** 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:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {vector<vector<int>> res;if(root==nullptr){return res;}queue<TreeNode*> myQueue;myQueue.push(root);bool flag=true; //true表示当层 从左到右,false 表示当层从右到左while(myQueue.size()!=0){vector<int> thisLevel;int size=myQueue.size();for(int i=0;i<size;i++){TreeNode* temp=myQueue.front();myQueue.pop();thisLevel.push_back(temp->val);if(temp->left){myQueue.push(temp->left);}if(temp->right){myQueue.push(temp->right);}}if(!flag){reverse(thisLevel.begin(),thisLevel.end());}res.push_back(thisLevel);flag=!flag;}return res;}
};
总结:
官方题解也是广度有限搜索,不过他是使用双端队列存储元素,然后再将双端队列转化为vector<int>。