题目链接:https://leetcode.com/problems/binary-tree-preorder-traversal/
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,2,3]
.
Note: Recursive solution is trivial, could you do it iteratively?
class Solution{
public:
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> array;
stack<TreeNode*> _stack;
TreeNode* p=root;
while(p!=NULL || !_stack.empty())
{
while(p!=NULL)
{
array.push_back(p->val);
_stack.push(p);
p=p->left;
}
if(!_stack.empty())
{
TreeNode* r=_stack.top();
p=r->right;
_stack.pop();
}
}
return array;
}
};
递归:
class Solution{
public:
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> res;
dfs(res,root);
return res;
}
void dfs(vector<int>& res,TreeNode* root)
{
if(root==NULL)
return;
res.push_back(root->val);
dfs(res,root->left);
dfs(res,root->right);
}
};