递归法:
class Solution {
public:
void traversal(TreeNode* cur,vector<int>& vec){
if(cur==nullptr) return;
vec.push_back(cur->val);
traversal(cur->left,vec);
traversal(cur->right,vec);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> vec;
traversal(root,vec);
return vec;
}
};
迭代法:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> vec;
if(root==nullptr) return vec;
st.push(root);
while(!st.empty()){
TreeNode* node=st.top();
st.pop();
if(node!=nullptr) vec.push_back(node->val);
if(node->right!=nullptr) st.push(node->right);
if(node->left!=nullptr) st.push(node->left);
}
return vec;
}
};
标记法:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> vec;
if(root!=nullptr) st.push(root);
while(!st.empty()){
TreeNode* node=st.top();
if(node!=nullptr){
st.pop();
if(node->right) st.push(node->right);
if(node->left) st.push(node->left);
st.push(node);
st.push(nullptr);
}
else{
st.pop();
node=st.top();
st.pop();
vec.push_back(node->val);
}
}
return vec;
}
};