一、题目
二、思路
层序遍历
1、建立双端队列容器,添加根节点
2、当从左往右添加时,添加头结点的值,从头尾部插入新节点,先插入头结点的左子节点、在插入右子节点;
3、当从右往左添加时,添加尾节点的值,从头部插入新节点,先插入头结点的右子节点、在插入左子节点;
三、代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>>NumSort;
if(pRoot==nullptr)
{
return NumSort;
}
deque<TreeNode*>NodeQue;
NodeQue.push_back(pRoot);
int LeftOrRight=0;
while(!NodeQue.empty())
{
vector<int>CenNum;
int NodeSize=NodeQue.size();
if(LeftOrRight==0)
{
TreeNode *TopNode=NodeQue.front();
for(int i=0;i<NodeSize;++i)
{
TopNode=NodeQue.front();
CenNum.emplace_back(TopNode->val);
if(TopNode->left)
{
NodeQue.push_back(TopNode->left);
}
if(TopNode->right)
{
NodeQue.push_back(TopNode->right);
}
NodeQue.pop_front();
LeftOrRight=1;
}
}
else
{
TreeNode *TopNode=NodeQue.back();
for(int i=0;i<NodeSize;++i)
{
TopNode=NodeQue.back();
CenNum.emplace_back(TopNode->val);
if(TopNode->right)
{
NodeQue.push_front(TopNode->right);
}
if(TopNode->left)
{
NodeQue.push_front(TopNode->left);
}
NodeQue.pop_back();
LeftOrRight=0;
}
}
NumSort.emplace_back(CenNum);
CenNum.clear();
}
return NumSort;
}
};