递归直接dfs,非递归用stack,首先push根节点,然后每次pop stack的top结点,先push top的right结点,再push top的left结点。
递归:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
v.clear();
preOrder(root);
return v;
}
void preOrder(TreeNode *root){
if(root == NULL) return ;
v.push_back(root->val);
preOrder(root->left);
preOrder(root->right);
}
vector<int> v;
};
非递归:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<int> v;
stack<TreeNode*> s;
if(root != NULL){
s.push(root);
}
TreeNode *tmp;
while(!s.empty()){
tmp = s.top();
v.push_back(tmp->val);
s.pop();
if(tmp->right != NULL)
s.push(tmp->right);
if(tmp->left != NULL)
s.push(tmp->left);
}
return v;
}
};