Description

Binary Tree Inorder Traversal

Given a binary tree, return the inorder traversal of its nodes' values.

Example:

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);
        }
    }
    */
};