原题传送门—>>

题目描述:

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

示例:

  • 输入: [1,null,2,3]
  • 1
  • \
  • 2
  • /
  • 3
  • 输出: [1,3,2]

递归很简单,这里采用堆栈代替递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    stack<TreeNode*> S;
    vector<int> inorderTraversal(TreeNode* root) {
        TreeNode* t = root;
        vector<int> ans;
        while((t)||!S.empty())
        {
            while(t)
            {
                S.push(t);
                t = t->left;
            }
 /*           if(!S.empty())//*******************
            {
                 t = S.top();
                 S.pop();
                 ans.push_back(t->val);
                 t = t->right;
            }
        }
*/
                 t = S.top();
                 S.pop();
                 ans.push_back(t->val);
                 t = t->right;
        return ans;
    }

};

注意注释掉的部分: 在浙大陈越数据结构课中,有一步 if(!S.empty())的判定…我在应用时发现这其实是废操作