标记法:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> st;
if(root!=nullptr) st.push(root);
while(!st.empty()){
TreeNode* node=st.top();//node遍历前进的步骤
//将所有遍历节点和处理节点(放入结果的节点元素)全部入栈,在处理节点之后放入一个空指针(标记法)
if(node!=nullptr){
st.pop();//清空栈,避免重复
if(node->right) st.push(node->right);//入栈顺序:右根左【中序:左根右】
st.push(node);
st.push(nullptr);
if(node->left) st.push(node->left);
}
else{
st.pop();//删除空节点
node=st.top();
st.pop();
result.push_back(node->val);
}
}
return result;
}
};