lc94.中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

示例 1:

输入:root = [1,null,2,3] 输出:[1,3,2]

示例 2:

输入:root = [] 输出:[]

示例 3:

输入:root = [1] 输出:[1]

提示:

树中节点数目在范围 [0, 100] 内 -100 <= Node.val <= 100

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

非递归解法

 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
#define Node TreeNode
#define push_left 1
#define vis       0
#define push_right 2

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        if(root==NULL ) return {};
        stack<Node*> stk;
        vector<int > res;
        Node* x = root;
        while(stk.size() || x) {
            if(x) {
                stk.push(x);
                x = x->left;
            }else {
                // for right
                x = stk.top();stk.pop();
                res.push_back(x->val);
                x = x->right;
            }
        }
        return res;
    }
};