题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
数据结构 双端队列 C++
一端受限的队列无法解决反向输出问题,那就双端嘛。思路同层次遍历一样,用r来记录当前层最后一个入队节点,时间复杂度为O(n),n为树的节点数;空间复杂度为O(n)。
vector<vector<int> > Print(TreeNode* pRoot) {
TreeNode* r = pRoot; //层次遍历,记录当前层最后一个入队节点
deque<TreeNode*> q;//双端队列
vector<vector<int>> ans;
if(pRoot==NULL)
return ans;
q.push_front(pRoot);
vector<int> floor; //每层节点值的集合
for(int i=0;!q.empty();){
TreeNode* tmp;
if(i%2==0){
tmp=q.front();
floor.push_back(tmp->val);
if(tmp->left!=NULL)
q.push_back(tmp->left);
if(tmp->right!=NULL)
q.push_back(tmp->right);
q.pop_front();
if(r==tmp){ //扫描到本层最后一个
ans.push_back(floor);
floor.clear();
r=q.front();
i++;
}
}
else{
tmp=q.back();
floor.push_back(tmp->val);
if(tmp->right!=NULL)
q.push_front(tmp->right);
if(tmp->left!=NULL)
q.push_front(tmp->left);
q.pop_back();
if(r==tmp){
ans.push_back(floor);
floor.clear();
r=q.back();
i++;
}
}
}
return ans;
}
查看1道真题和解析