【问题】请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
【思路】这道题目与之前有个"二叉树的深度"题目类似,思路的核心是层次遍历,但是在遍历的同时需要处理每一层数据,因此可以使用一个while循环,将每层数据储存到res_tmp中,并且使用even变量来标记层数的奇偶性,如果是奇数的话,那么需要将res_tmp进行反转!
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution { 12 public: 13 vector<vector<int> > Print(TreeNode* pRoot) { 14 vector<vector<int>> res; 15 if(pRoot == nullptr) return res; 16 queue<TreeNode*> que; 17 bool even = false; 18 que.push(pRoot); 19 while(!que.empty()){ 20 int size = que.size(); 21 vector<int> res_tmp; // 二叉树得高度,层次遍历 22 for(int i = 0;i < size; i++){ 23 TreeNode* tmp = que.front(); 24 res_tmp.push_back(tmp->val); 25 que.pop(); 26 if(tmp->left != nullptr) 27 que.push(tmp->left); 28 if(tmp->right != nullptr) 29 que.push(tmp->right); 30 } 31 if(even){ 32 reverse(res_tmp.begin(), res_tmp.end()); 33 } 34 res.push_back(res_tmp); 35 even = !even; 36 } 37 return res; 38 } 39 };