前序:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
if(root==NULL) return {};
stack<TreeNode*> s;
s.push(root);
vector<int> ans;
while(!s.empty()){
TreeNode* tmp = s.top();
s.pop();
ans.push_back(tmp->val);
if(tmp->right) s.push(tmp->right);
if(tmp->left) s.push(tmp->left);
}
return ans;
}
};
中序
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> s;
TreeNode* tmp;
tmp = root;
while(tmp!=NULL || !s.empty()){
while(tmp){
s.push(tmp);tmp = tmp->left;
}
tmp = s.top();s.pop();
ans.push_back(tmp->val);
tmp = tmp->right;
}
return ans;
}
};
后序
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
if(root==NULL) return {};
stack<TreeNode*> s;
s.push(root);
vector<int> ans;
TreeNode* tmp;
while(!s.empty()){
tmp = s.top();
s.pop();
ans.push_back(tmp->val);
if(tmp->left) s.push(tmp->left);
if(tmp->right) s.push(tmp->right);
}
reverse(ans.begin(),ans.end());
return ans;
}
};