二叉树的三种迭代遍历方式
参考链接
#include "bits/stdc++.h"
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
};
vector<int> preTraver(TreeNode* root) {
vector<int> result;
stack<TreeNode*> sk;
if(root != NULL) {
sk.push(root);
}
while(sk.size()) {
TreeNode* cur = sk.top(); sk.pop();
result.push_back(cur->val);
if(cur->right != NULL) sk.push(cur->right);
if(cur->left != NULL) sk.push(cur->left);
}
return result;
}
vector<int> midTraver(TreeNode* root) {
vector<int> result;
stack<TreeNode*> sk;
TreeNode* cur = root;
while(cur != NULL || sk.size()) {
if(cur != NULL) {
sk.push(cur);
cur = cur->left;
}
else {
cur = sk.top();
sk.pop();
result.push_back(cur->val);
cur = cur->right;
}
}
return result;
}
vector<int> posTraver(TreeNode* root) {
vector<int> result;
stack<TreeNode*> sk;
if(root != NULL) {
sk.push(root);
}
while(sk.size()) {
TreeNode* cur = sk.top();
result.push_back(cur->val);
if(cur->left != NULL) sk.push(cur->left);
if(cur->right != NULL) sk.push(cur->right);
}
reverse(result.begin(), result.end());
return result;
}
vector<vector<int>> levelTraver(TreeNode* root) {
vector<vector<int>> result;
queue<TreeNode*> q;
if(root != NULL) q.push(root);
while(q.size()) {
int size = q.size();
vector<int> v;
for(int i = 0; i < size; i++) {
TreeNode* cur = q.front();
q.pop();
v.push_back(cur->val);
if(cur->left) q.push(cur->left);
if(cur->right) q.push(cur->right);
}
result.push_back(v);
}
return result;
}
int main() {
return 0;
}