相较于前序遍历,多了一个指针进行维护,指针一直指向左子树,直到为空,才取出栈顶节点(其实就是最左的子节点)。pushback完,再->右子树
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> treeStack;
if (!root) {
return {};
}
TreeNode* cur = root;
while ((cur !=nullptr) || (!treeStack.empty())) {
if (cur != nullptr) {
treeStack.push(cur);
cur = cur -> left;
}
else {
cur = treeStack.top();
treeStack.pop();
result.push_back(cur -> val);
cur = cur -> right;
}
}
return result;
}
};