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;
}
};