题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路
看似简单,以为是层次遍历就行了,实则不然啊。
需要用到两个栈,交替使用,才能做到上一层从左到右,下一行从右到左。。。
C++代码
/* 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>> results;
if(pRoot == NULL){
return results;
}
stack<TreeNode*> st1;
stack<TreeNode*> st2;
st1.push(pRoot);
vector<int> row;
row.push_back(pRoot->val);
results.push_back(row);
while(!st1.empty()||!st2.empty()){
if(st1.empty()&&st2.empty()){
break;
}
vector<int> row;
if(st2.empty()){
while(!st1.empty()){
if(st1.top()->right!=NULL){
row.push_back(st1.top()->right->val);
st2.push(st1.top()->right);
}
if(st1.top()->left!=NULL){
row.push_back(st1.top()->left->val);
st2.push(st1.top()->left);
}
st1.pop();
}
}else{
while(!st2.empty()){
if(st2.top()->left!=NULL){
row.push_back(st2.top()->left->val);
st1.push(st2.top()->left);
}
if(st2.top()->right!=NULL){
row.push_back(st2.top()->right->val);
st1.push(st2.top()->right);
}
st2.pop();
}
}
if(row.size()>0){
results.push_back(row);
}
}
return results;
}
};