本文最后更新于624 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
题目链接/文章讲解/视频讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%BF%AD%E4%BB%A3%E9%81%8D%E5%8E%86.html
CPP
#include<iostream>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
};
class Solution
{
public:
vector<int> preorderTraversal(TreeNode* root){
vector<int>res;
stack<TreeNode*> st;
if(root == NULL) return res;
st.push(root);
if(!st.empty()){
TreeNode *node = st.top();
st.pop();
res.push_back(node->val);
if(node->right)st.push(node->right);
if(node->left)st.push(node->left);
}
return res;
}
vector<int> inorderTraversal(TreeNode* root){
vector<int>res;
stack<TreeNode*>st;
TreeNode *cur = root;
while(cur != NULL || !st.empty()){
if(cur != NULL){
st.push(cur);
cur = cur->left;
}else{
TreeNode *node = st.top();
st.pop();
res.push_back(node->val);
cur = cur->right;
}
}
return res;
}
vector<int> postorderTraversal(TreeNode* root){
vector<int>res;
stack<TreeNode*>st;
if(root == NULL)return res;
st.push(root);
while(!st.empty()){
TreeNode *node = st.top();
st.pop();
res.push_back(node->val);
if(node->left)st.push(node->left);
if(node->right)st.push(node->right);
}
reverse(res.begin(),res.end());
return res;
}
};