2.分行打印
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>> res;
if (pRoot == nullptr)
return res;
deque<TreeNode*> d;
d.push_back(pRoot);
int nextLevel = 0;
int temp = 1;
vector<int> v;
while (!d.empty()) {
TreeNode* pNode = d.front();
if (pNode->left != nullptr) {
d.push_back(pNode->left);
++nextLevel;
}
if (pNode->right != nullptr) {
d.push_back(pNode->right);
++nextLevel;
}
d.pop_front();
v.push_back(pNode->val);
temp--;
if (temp == 0) {
res.push_back(v);
temp = nextLevel;
nextLevel = 0;
v.clear();
}
}
return res;
}
};
3.之字形打印
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>> res;
stack<TreeNode*> s1, s2;
if (pRoot != nullptr)
s1.push(pRoot);
TreeNode* pNode;
while (!s1.empty() || !s2.empty()) {
vector<int> data;
if (!s1.empty()) {
while (!s1.empty()) {
pNode = s1.top();
s1.pop();
data.push_back(pNode->val);
if (pNode->left != nullptr)
s2.push(pNode->left);
if (pNode->right != nullptr)
s2.push(pNode->right);
}
res.push_back(data);
}
else if (!s2.empty()) {
while (!s2.empty()) {
pNode = s2.top();
s2.pop();
data.push_back(pNode->val);
if (pNode->right != nullptr)
s1.push(pNode->right);
if (pNode->left != nullptr)
s1.push(pNode->left);
}
res.push_back(data);
}
}
return res;
}
};