1.前序遍历
递归
class Solution {
public:
void Traversal(TreeNode *cur ,vector<int> & res){
if(cur == nullptr) return;
res.push_back(cur->val);
Traversal(cur->left,res);
Traversal(cur->right,res);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
Traversal(root,result);
return result;
}
};
迭代
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> result ;
if (root == NULL) return result;
st.push(root);
while(!st.empty()){
TreeNode* cur = st.top();
st.pop();
result.push_back(cur->val);
if(cur->right) st.push(cur->right);
if(cur->left) st.push(cur->left);
}
return result;
}
};
2.中序遍历
递归
class Solution {
public:
void Traversal(TreeNode* cur , vector<int> & res){
if(cur == nullptr) return;
Traversal(cur->left,res);
res.push_back(cur->val);
Traversal(cur->right,res);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
if(root == nullptr) return result;
Traversal(root,result);
return result;
}
};
迭代
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> result;
TreeNode* cur = root;
if(cur == NULL) return result;
while(cur != NULL || !st.empty()){
if(cur != NULL){
st.push(cur);
cur =cur->left;
}else{
cur = st.top();
st.pop();
result.push_back(cur->val);
cur = cur->right;
}
}
return result;
}
};
3.后序遍历
递归
class Solution {
public:
void Traversal(TreeNode *cur , vector<int> &res){
if(cur == nullptr) return;
Traversal(cur->left , res);
Traversal(cur->right ,res);
res.push_back(cur->val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
Traversal(root , result);
return result;
}
};
迭代
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> result;
if(root == nullptr) return result;
st.push(root);
while(!st.empty()){
TreeNode *cur = st.top();
st.pop();
result.push_back(cur->val);
if(cur->left) st.push(cur->left);
if(cur->right) st.push(cur->right);
}
reverse(result.begin(),result.end());
return result;
}
};