把二叉树打印成多行_牛客题霸_牛客网 ---leetcode102-层序遍历
描述
给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。
1.根节点入队,pcur当前结点,plast每次保存入队结点,prelast保存每一层的最后一个结点
2.队不空的时候进入循环,如果当前结点有左孩子,左孩子入队,plast保存,右孩子不空,右孩子入队-plast保存
3.如果当前结点pcur==prelast,保存结果该行结果。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
#include <deque>
#include <iterator>
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > Print(TreeNode* pRoot) {
// write code here
if(!pRoot) return vector<vector<int>> {};
using Res_type = vector<vector<int>> ;
Res_type res;
vector<int> res_row;//保存每一层的结果
TreeNode *pCur = pRoot;
TreeNode *pLast = pRoot;//记录每次入队的结点
TreeNode *preLast = pRoot; //记录plast,当plast指向每一层的最后一个结点时更新
queue<TreeNode *> treeQueue; //辅助队列
treeQueue.push(pCur);
while(!treeQueue.empty()){
pCur = treeQueue.front();
res_row.push_back(pCur->val);
if(pCur->left){
treeQueue.push(pCur->left);
pLast = pCur->left;
}
if(pCur->right){
treeQueue.push(pCur->right);
pLast = pCur->right;
}
if(pCur == preLast){ //当前出队结点 = 每一层最右边的结点
res.push_back(res_row);
res_row.clear();
preLast = pLast; //更新prelast
}
treeQueue.pop();
}
return res;
}
};