class Solution {
public:
vector<int> ans;
vector<int> preorderTraversal(TreeNode* root) {
preOrder(root);
return ans;
}
void preOrder(TreeNode* root){
if(!root){
return;
}
ans.push_back(root->val);
preOrder(root->left);
preOrder(root->right);
}
};
仿照遞歸的思想,向下遞歸其實就是壓棧,回溯其實就是出棧。
有沒有覺得和層次遍歷的代碼極其相似,其實就是把隊列換成了棧,以及入棧(隊列)的順序不一樣
class Solution {
public:
vector<int> ans;
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
s.push(root);
while(!s.empty()){
TreeNode * r = s.top();
s.pop();
if(r==nullptr){
continue;
}
ans.push_back(r->val);
s.push(r->right);
s.push(r->left);
}
return ans;
}
};