递归遍历
题目链接/文章讲解/视频讲解:代码随想录
代码
前序
void traversal(TreeNode *cur, vector<int> &res){
if(cur == nullptr) return;
res.push_back(cur->val);
traversal(cur->left, res);
traversal(cur->right, res);
}
中序
void traversal(TreeNode *cur, vector<int> &res){
if(cur == nullptr) return;
traversal(cur->left, res);
res.push_back(cur->val);
traversal(cur->right, res);
}
后序
void traversal(TreeNode *cur, vector<int> &res){
if(cur == nullptr) return;
traversal(cur->left, res);
traversal(cur->right, res);
res.push_back(cur->val);
}
迭代遍历
前序
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
if(root == nullptr) return {};
stack<TreeNode*> st;
vector<int> res;
TreeNode* temp;
st.push(root);
while(!st.empty()){
temp = st.top();
res.push_back(temp->val);
st.pop();
if(temp->right != nullptr) st.push(temp->right);
if(temp->left != nullptr) st.push(temp->left);
}
return res;
}
};
中序
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
if(root == nullptr) return {};
TreeNode* cur = root;
vector<int> res;
stack<TreeNode*> st;
while(cur != nullptr || !st.empty()){
if(cur != nullptr){
st.push(cur);
cur = cur->left;
}
else{
cur = st.top();
res.push_back(cur->val);
st.pop();
cur = cur->right;
}
}
return res;
}
};
后序
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
if(root == nullptr) return {};
stack<TreeNode*> st;
vector<int> res;
TreeNode* temp;
st.push(root);
while(!st.empty()){
temp = st.top();
res.push_back(temp->val);
st.pop();
if(temp->left != nullptr) st.push(temp->left);
if(temp->right != nullptr) st.push(temp->right);
}
reverse(res.begin(),res.end());
return res;
}
};