按之字形顺序打印二叉树
Posted hellosnow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按之字形顺序打印二叉树相关的知识,希望对你有一定的参考价值。
题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
这道题也是二叉树的层次遍历,但要求按行打印,并且是之字形的,需要定义一个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 };
以上是关于按之字形顺序打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章