- 前序
递归
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
preOrder(root,res);
return res;
}
void preOrder(TreeNode* root,vector<int>& res){
if(root==NULL) return;
res.emplace_back(root->val);
preOrder(root->left,res);
preOrder(root->right,res);
}
};
很好理解,不知道emplace_back的同学,emplace_back这里其实就相当于给res添加值这样想就好了=c=
迭代
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode*> sk;
vector<int> res;
while(root||sk.size()){
while(root){
sk.push(root);
res.emplace_back(root->val);
root=root->left;
}
root=sk.top();sk.pop();
root=root->right;
}
return res;
}
};
- 中序
迭代
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> sk;
vector<int> res;
while(root||sk.size())
{
while(root)
{
sk.push(root);
root=root->left;
}
root=sk.top();sk.pop();
res.emplace_back(root->val);
root=root->right;
}
return res;
}
};