class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>> res;
if (pRoot == nullptr) return res;
stack<TreeNode*> left;
stack<TreeNode*> right;
left.push(pRoot);
int flag = 0;//flag为0 左栈出,进右栈
while (!left.empty() || !right.empty()){
vector<int> temp;
if (flag == 0){
auto length = left.size();
for (decltype(length) i = 0; i != length; ++i){
if (left.top() != nullptr){
temp.push_back(left.top()->val); //vec记录
right.push(left.top()->left);
right.push(left.top()->right); //子树进右栈
}
left.pop(); //清空栈顶
}
flag = 1;
}
else if (flag == 1){
auto length = right.size();
for (decltype(length) i = 0; i != length; ++i){
if (right.top() != nullptr){
temp.push_back(right.top()->val); //vec记录
left.push(right.top()->right);
left.push(right.top()->left); //子树进左栈
}
right.pop(); //清空栈顶
}
flag = 0;
}
if (!temp.empty())
res.push_back(temp);
}
return res;
}
};题目说之字形按层打印树,故考虑广度优先搜索。
1、因为要之字形打印,常规队列存储无法满足需求,采用两个栈(左栈和右栈),轮换存储的方式;
2、存储规则为左栈进栈时先右子后左子,右栈相反;初始化root放在左栈
欢迎交流指正!!!

京公网安备 11010502036488号