// Binary Tree Preorder Traversal class Solution { public: vector preorderTraversal(TreeNode *p) { vector a; stack s; for(;;) { while (p) { a.push_back(p->val); if (p->right) s.push(p->right); p = p->left; } if (s.empty()) break; p = s.top(); s.pop(); } return a; } };