【剑指offer】按之字形顺序打印二叉树

题目链接:按之字形顺序打印二叉树

 

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

 

题解:层序遍历。只不过偶数层翻转一下顺序就能变成之字型。

 

代码:

 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>> ans;
15         vector<int> level;
16         if(pRoot == NULL)    return ans;
17         
18         queue<TreeNode*> q;
19         q.push(pRoot);
20         
21         bool flag = false;
22         while(!q.empty()){
23             level.clear();
24             int len = q.size();
25             for(int i = 0; i < len ;i++){
26                 TreeNode* temp = q.front();
27                 q.pop();
28                 level.push_back(temp->val);
29                 if(temp->left)    q.push(temp->left);
30                 if(temp->right)    q.push(temp->right);
31             }
32             if(flag)    reverse(level.begin(),level.end());
33             ans.push_back(level);
34             flag = !flag;
35         }
36         return ans;
37     }
38     
39 };

 

posted @ 2020-03-05 23:20  甜酒果。  阅读(122)  评论(0编辑  收藏  举报