LeetCode 103. 二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
返回锯齿形层次遍历如下:
[ [3], [20,9], [15,7] ]
算法:跟层次遍历几乎一样。我们只需要对最后的向量做reverse变换即可。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> getval(vector<TreeNode*>& p){ vector<int>path; for(auto x:p) path.push_back(x->val); return path; } vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>>res; if(!root)return res; vector<TreeNode*>level; level.push_back(root); res.push_back(getval(level)); while(true){ vector<TreeNode*>nl; for(auto x:level){ if(x->left)nl.push_back(x->left); if(x->right)nl.push_back(x->right); } if(nl.size()){ res.push_back(getval(nl)); level=nl; } else break; } for(int i=0;i<res.size();i++){ if(i%2==1) reverse(res[i].begin(),res[i].end()); } return res; } };