码迷,mamicode.com
首页 > 其他好文 > 详细

按之字形顺序打印二叉树

时间:2019-12-25 01:55:18      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:str   queue   code   level   auto   打印   eve   二叉树   lse   

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

 

这道题也是二叉树的层次遍历,但要求按行打印,并且是之字形的,需要定义一个flag,确定这一行的打印顺序是从左到右还是从右至左。每行打印完,只要将flag取反,就可以改变下一行的打印顺序。

怎样按行打印呢?我们可以定义一个队列queue和一个数组level,队列queue存树的结点,数组level存每一行的值。在遍历每一行的循环开始前,先用一个变量len记录队列里的结点数目,这样就可以区分之后添加的儿子结点啦。尽管队列queue还有结点,但已经遍历了len个结点了,说明此时队列queue里都是新扩展的儿子结点了。

 

c++代码如下:

 1 class Solution {
 2 public:
 3     vector<vector<int> > Print(TreeNode* pRoot) {
 4         vector<vector<int>> res;
 5         if(!pRoot) return res;
 6  
 7         queue<TreeNode*> q;
 8         q.push(pRoot);
 9         bool rev = false;
10 
11         while(q.size()){
12             int len = q.size();
13             vector<int> level;
14             for(int i = 0; i < len; i++){
15                 auto t = q.front();
16                 level.push_back(t->val);
17                 if(t->left) q.push(t->left);
18                 if(t->right) q.push(t->right);
19                 q.pop();
20             }
21             if(rev) reverse(level.begin(), level.end());
22             rev = !rev;
23             res.push_back(level);
24         }
25         return res;
26     }
27 };

 

按之字形顺序打印二叉树

标签:str   queue   code   level   auto   打印   eve   二叉树   lse   

原文地址:https://www.cnblogs.com/hellosnow/p/12094329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!