题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
问题分析
利用栈的性质,后进先出实现逆序打印。
同时区别奇偶不同的函数
解题思路1
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>> ret;
if(pRoot==NULL) return ret;
stack<TreeNode*> s1;
stack<TreeNode*> s2;
s1.push(pRoot);
while(!s1.empty()||!s2.empty()){
vector<int> v1;
vector<int> v2;
while(!s1.empty()){
v1.push_back(s1.top()->val);
if(s1.top()->left!=NULL) s2.push(s1.top()->left);
if(s1.top()->right!=NULL) s2.push(s1.top()->right);
s1.pop();
}
if(v1.size()!=0)
ret.push_back(v1);
while(!s2.empty()){
v2.push_back(s2.top()->val);
if(s2.top()->right!=NULL) s1.push(s2.top()->right);
if(s2.top()->left!=NULL) s1.push(s2.top()->left);
s2.pop();
}
if(v2.size()!=0)
ret.push_back(v2);
}
return ret;
}
};
网友评论