// Given a binary tree, return the preOrder traversal of its nodes' value
// The main idea here is to use stack, nothing special
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
if(!root) return result;
stack<TreeNode*> nodes;
nodes.push(root);
while(!nodes.empty()) {
TreeNode* tmp = nodes.top();
nodes.pop(); // remember to pop it out.
result.push_back(tmp->val);
if(tmp->right != NULL)
nodes.push(tmp->right);
if(tmp->left != NULL)
nodes.push(tmp->left);
}
}
Preorder iterator
class PreorderIterator {
private:
stack<TreeNode*> nodes;
public:
void preorderIterator(TreeNode* root) {
nodes.push_back(root);
}
void hasNext() {
return !nodes.empty();
}
void getNext() {
if(hasNext()) {
TreeNode* top = nodes.top();
if(top->right) nodes.push_back(top->right);
if(top->left) nodes.push_back(top->left);
nodes.pop();
}
}
}