Problem:
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?
Analysis:
Solutions:
C++:
vector<int> preorderTraversal(TreeNode *root)
{
vector<int> rList;
if(root == NULL)
return rList;
stack<TreeNode *> visited;
TreeNode *pCurrNode = root;
while(pCurrNode || !visited.empty()) {
if(pCurrNode) {
rList.push_back(pCurrNode->val);
visited.push(pCurrNode);
pCurrNode = pCurrNode->left;
} else {
pCurrNode = visited.top();
visited.pop();
pCurrNode = pCurrNode->right;
}
}
return rList;
}
Java:
Python: