按之字形数据打印二叉树

【问题】请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

【思路】这道题目与之前有个"二叉树的深度"题目类似,思路的核心是层次遍历,但是在遍历的同时需要处理每一层数据,因此可以使用一个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 };
原文地址:https://www.cnblogs.com/zhudingtop/p/11459241.html