前序
class Solution {
public:
std::vector<int> vec;
vector<int> preorderTraversal(TreeNode* root) {
if(nullptr==root) return vec;
vec.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
return vec;
}
};
vector<int> preorderTraversal(TreeNode* root) {
std::vector<int> res;
if(nullptr==root) return res;
std::stack<TreeNode*> st;
st.push(root);
while(!st.empty())
{
TreeNode* p = st.top();
res.push_back(p->val);
st.pop();
if(p->right) st.push(p->right);
if(p->left) st.push(p->left);
}
return res;
}
中序
class Solution {
public:
void inOrderTraverse(std::vector<int>& res, TreeNode* node){
if(nullptr==node) return;
inOrderTraverse(res,node->left);
res.push_back(node->val);
inOrderTraverse(res,node->right);
}
vector<int> inorderTraversal(TreeNode* root) {
std::vector<int> res;
inOrderTraverse(res,root);
return res;
}
};
vector<int> inorderTraversal(TreeNode* root) {
std::vector<int> res;
std::stack<TreeNode*> st;
TreeNode* cur = root;
while(cur || !st.empty())
{
if(cur){
st.push(cur);
cur=cur->left;
}else{
TreeNode* p = st.top();
res.push_back(p->val);
st.pop();
cur = p->right;
}
}
return res;
}
后序
class Solution {
public:
void postOrderTraverse(std::vector<int>& res, TreeNode* node){
if(nullptr==node) return;
postOrderTraverse(res,node->left);
postOrderTraverse(res,node->right);
res.push_back(node->val);
}
vector<int> postorderTraversal(TreeNode* root) {
std::vector<int> res;
postOrderTraverse(res,root);
return res;
}
};
vector<int> postorderTraversal(TreeNode* root) {
std::vector<int> res;
if(root==nullptr) return res;
std::stack<TreeNode*> st;
st.push(root);
while(!st.empty())
{
TreeNode* p = st.top();
st.pop();
res.push_back(p->val);
if(p->left) st.push(p->left);
if(p->right) st.push(p->right);
}
std::reverse(res.begin(),res.end());
return res;
}