题目来源
144. 二叉树的前序遍历
题目描述

struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
}
};
题目解析
递归
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> vec;
helper(root, vec);
return vec;
}
private:
void helper(TreeNode* root, vector<int> &vec){
if(root == NULL){
return ;
}
vec.emplace_back(root->val);
helper(root->left, vec);
helper(root->right, vec);
}
};
迭代
vector<int> preorderTraversal(TreeNode* root) {
vector<int> vec;
if(root == NULL){
return vec;
}
std::stack<TreeNode*> stack;
stack.push(root);
while (!stack.empty()){
TreeNode *peek = stack.top();
stack.pop();
if(peek == nullptr){
vec.push_back(stack.top()->val);
stack.pop();
}else{
if(peek->right){
stack.emplace(peek->right);
}
if(peek->left){
stack.emplace(peek->left);
}
stack.emplace(peek);
stack.emplace(nullptr);
}
}
return vec;
}
