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?
/**
* 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) {
vector<int> retVtr;
if (!root)
return retVtr;
stack<TreeNode *> nodeStack;
TreeNode *pCurNode = root;
/*
* previously, my wrong thinking is that, the left children will be gottn from the stack's top element
* while the right children also be gottn from the stack's top element
* so, code just below the top level while will have difficulty to get whether the left or right children
*
* the correct method is, the left children should be gottn just from the binary tree's left pointer, while
* the right children should be gottn from the top element from the stack
*/
while (pCurNode || !nodeStack.empty())
{
while (pCurNode) // handle left children
{
nodeStack.push(pCurNode);
retVtr.push_back(pCurNode->val);
pCurNode = pCurNode->left;
}
if (!nodeStack.empty()) // handle right children
{
pCurNode = nodeStack.top();
nodeStack.pop();
pCurNode = pCurNode->right;
}
}
return retVtr;
}
};