题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路
见代码。
代码实现
/*
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>> ret;
if(pRoot != NULL){
stack<TreeNode *> stack1, stack2;
stack1.push(pRoot);
while(!stack1.empty() || !stack2.empty()){
vector<int> vector1, vector2;
TreeNode *stackTopElem = NULL;
while(!stack1.empty()){
stackTopElem = stack1.top();
if(stackTopElem->left) stack2.push(stackTopElem->left);
if(stackTopElem->right) stack2.push(stackTopElem->right);
vector1.push_back(stackTopElem->val);
stack1.pop();
}
if(vector1.size()) ret.push_back(vector1);
while(!stack2.empty()){
stackTopElem = stack2.top();
if(stackTopElem->right) stack1.push(stackTopElem->right);
if(stackTopElem->left) stack1.push(stackTopElem->left);
vector2.push_back(stackTopElem->val);
stack2.pop();
}
if(vector2.size()) ret.push_back(vector2);
}
}
// 如果 pRoot == NULL,则返回空 vector。
return ret;
}
};
运行结果
运行时间:2ms
占用内存:492k