给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / 9 20 / 15 7
返回锯齿形层序遍历如下:
[ [3], [20,9], [15,7] ]
/** * 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<vector<int>> zigzagLevelOrder(const TreeNode* root) { auto ret=vector<vector<int>>(); zigzagLevelOrder(root,0,ret); return ret; } private: void zigzagLevelOrder(const TreeNode* root,int level,vector<vector<int>>& ret){ if(root==nullptr||level<0)return; if(ret.size()<=level)ret.push_back(vector<int>()); if(level%2==0)ret[level].push_back(root->val); else ret[level].insert(ret[level].begin(),root->val); zigzagLevelOrder(root->left,level+1,ret); zigzagLevelOrder(root->right,level+1,ret); } };