原题:
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?
解题:
递归前序遍历二叉树的话这个很容易,但是迭代前序遍历二叉树呢?递归的时候也是先从根节点出发,然后左子树,再右子树,只有左子树都遍历完了才开始遍历右子树,可以巧妙的借用stack来实现。AC的C++代码如下:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ret;
stack<TreeNode*> s;
TreeNode *p=root;
while(p!=NULL||!s.empty())
{
while(p!=NULL)
{
ret.push_back(p->val);
s.push(p);
p=p->left;
}
if(!s.empty())
{
p=s.top();
s.pop();
p=p->right;
}
}
return ret;
}