1 #include <bits/stdc++.h>
2
3 using namespace std;
4
5 /**
6 * Definition of TreeNode:
7 * class TreeNode {
8 * public:
9 * int val;
10 * TreeNode *left, *right;
11 * TreeNode(int val) {
12 * this->val = val;
13 * this->left = this->right = NULL;
14 * }
15 * }
16 */
17
18
19 class TreeNode {
20 public:
21 int val;
22 TreeNode *left, *right;
23 TreeNode(int val) {
24 this->val = val;
25 this->left = this->right = NULL;
26 }
27 };
28
29 class Solution {
30 public:
31 /**
32 * @param root: The root of binary tree.
33 * @return: Preorder in vector which contains node values.
34 */
35 struct record{
36 TreeNode* tn;
37 int state;
38 record(TreeNode* tn, int state):tn(tn),state(state){}
39 };
40 vector<int> preorderTraversal(TreeNode *root) {
41 // write your code here
42 vector<int> ans;
43 TreeNode* cur = root;
44 stack<record> s;
45 int state = 0;
46 while(1){
47 if(cur == NULL || (cur && state == 2)){
48 if(cur == root) break;
49 record tmp = s.top();
50 cur = tmp.tn;
51 state = tmp.state;
52 s.pop();
53 } else if(state == 0){
54 ans.push_back(cur->val);
55 s.push(record(cur, 1));
56 cur = cur -> left;
57 } else if(state == 1){
58 s.push(record(cur, 2));
59 cur = cur -> right;
60 state = 0;
61 }
62 }
63 return ans;
64 }
65 };
66
67 int main(){
68
69 }