题目描述:给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)。
例如:给定的二叉树是{3,9,20,#,#,15,7},
该二叉树之字形层序遍历的结果是
[ [3], [20,9], [15,7] ]
解题思路:二叉树的层序遍历要用队列,二叉树的前中后序遍历要用堆栈,当然也可以用递归。
回归本题,因为是要求一层从左到右一层从右到左,所以和标准的层序遍历还要多一层之字变化的要求。
这里如果在二叉树结点一层一层放到vector<int> ans 里是不好区分左右的话,可以在vector<vector<int>>res反转某一层(即ans)的顺序。
c++代码如下:
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 * @return int整型vector<vector<>> */ vector<vector<int> > zigzagLevelOrder(TreeNode* root) { vector<vector<int> > res; queue <TreeNode *> que; if(root==nullptr) return res; que.push(root); while(!que.empty()) { vector<int> ans; int size=que.size(); for(int i=0;i<size;i++) { TreeNode *node=que.front(); que.pop(); ans.push_back(node->val); if(node->left) que.push(node->left); if(node->right) que.push(node->right); } res.push_back(ans); } for (int i = 0; i < res.size(); i++) if (i & 1 != 0) reverse(res[i].begin(), res[i].end()); return res; } };