1. 题目描述
2. 思路分析
思路可以参考前序遍历:
3. 代码展示
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> ret;
TreeNode* cur = root;
//当前节点不为空 或者 栈不为空, 此时还没有遍历完, 继续循环
while(cur || !st.empty()) {
//走最左路径, 但此时不能访问当前结点, 要先访问左结点
while(cur) {
//不访问当前结点, 但是该入栈还是要入栈
st.push(cur);
cur = cur->left;
}
//走完最左路径, 需要向上返回
cur = st.top();
st.pop();
//访问根结点, 保存
ret.push_back(cur->val);
//走右子树
cur = cur->right;
}
return ret;
}
};