剑指offer 059、按之字形顺序打印二叉树
题目
题解
非常不错的一道题
利用两个栈来解决(一个栈存奇数行,另一个存偶数行)
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
if (!pRoot) return vector<vector<int> >();
vector<vector<int> > result;
stack<TreeNode*> stack1, stack2;
stack1.push(pRoot);
while (!stack1.empty() || !stack2.empty()) {
vector<int> res1, res2;
TreeNode* cur = nullptr;
// 将偶数行放到栈2中
while (!stack1.empty()) {
cur = stack1.top();
if (cur->left)
stack2.push(cur->left);
if (cur->right)
stack2.push(cur->right);
res1.push_back(stack1.top()->val); // 保存奇数行的数据
stack1.pop();
}
if (!res1.empty())
result.push_back(res1);
// 将奇数行放到栈1中
while (!stack2.empty()) {
cur = stack2.top();
if (cur->right)
stack1.push(cur->right);
if (cur->left)
stack1.push(cur->left);
res2.push_back(stack2.top()->val); // 保存偶数行的数据
stack2.pop();
}
if (!res2.empty())
result.push_back(res2);
}
return result;
}
};