二叉树遍历的递归写法:
class Solution {
private:
void traversal(TreeNode* root,vector<int>& vac){
if(root==nullptr) return;
vac.push_back(root->val);
traversal(root->left,vac);
traversal(root->right,vac);
}
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> vac;
traversal(root,vac);
return vac;
}
};
class Solution {
private:
void traversal(TreeNode* root,vector<int>& vac){
if(root==nullptr) return ;
traversal(root->left,vac);
traversal(root->right,vac);
vac.push_back(root->val);
}
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> vac;
traversal(root,vac);
return vac;
}
};
class Solution {
private:
void traversal(TreeNode* root,vector<int>& vac){
if(root==nullptr) return ;
traversal(root->left,vac);
vac.push_back(root->val);
traversal(root->right,vac);
}
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> vac;
traversal(root,vac);
return vac;
}
};
二叉树遍历的迭代写法:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
if(root==nullptr) return result;
stack<TreeNode*> st;
st.push(root);
while(!st.empty()){
TreeNode* ret=st.top();
st.pop();
if(ret!=nullptr){
result.push_back(ret->val);
}
else continue;
st.push(ret->right);
st.push(ret->left);
}
return result;
}
};
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> st;
if(root==nullptr) return result;
st.push(root);
while(!st.empty()){
TreeNode* tmp=st.top();
st.pop();
result.push_back(tmp->val);
if(tmp->left!=nullptr) st.push(tmp->left);
if(tmp->right!=nullptr) st.push(tmp->right);
}
reverse(result.begin(),result.end());
return result;
}
};
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> result;
TreeNode* cur=root;
while(cur!=nullptr||!st.empty()){
if(cur!=nullptr){
st.push(cur);
cur=cur->left;
}
else{
cur=st.top();
st.pop();
result.push_back(cur->val);
cur=cur->right;
}
}
return result;
}
};