前序遍历的访问顺序实际上就是 根->左->右
输入: [1,null,2,3]
1
2
/
3
输出: [1,2,3]
1.利用dfs递归来解决:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> a;
dfs(root,a);
return a;
}
void dfs(TreeNode* root,vector<int> &a){
if(root!=NULL){
a.push_back(root->val);
dfs(root->left,a);//先搜索左节点
dfs(root->right,a);//搜索右节点
}
}
};
2.使用迭代的方法来解决:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> a;
if(root==NULL){
return a;
}
stack<TreeNode*> P;
while(root!=NULL || !P.empty()){
while(root!=NULL){
a.push_back(root->val);
P.push(root);
root=root->left;
}
if(!P.empty()){
root=P.top();
root=root->right;
P.pop();
}
}
return a;
}
};