Description
Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes’ values.
Example:
| 1
2
3
4
5
6
7
8
 | Input: [1,null,2,3]
   1
    \
     2
    /
   3
Output: [1,3,2]
 | 
Follow up: Recursive solution is trivial, could you do it iteratively?
Solution
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 | class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> r;
        inorderVisit(r, root);
        return r;
    }
private:
    void inorderVisit(vector<int> &r, TreeNode *node) {
        std::stack<TreeNode *> s;
        auto *cur = node;
        while(cur || !s.empty()) {
            while(cur) {
                s.push(cur);
                cur = cur->left;
            }
            cur = s.top();
            s.pop();
            r.push_back(cur->val);
            cur = cur->right;
        }
    }
    /* 递归
    void inorderVisit(vector<int> &r, TreeNode *node) {
        if (!node) {
            return;
        }
        if (node->left) {
            inorderVisit(r, node->left);
        }
        r.push_back(node->val);
        if (node->right) {
            inorderVisit(r, node->right);
        }
    }
    */
};
 |