二叉树的中序遍历,利用栈
向左遍历到底,访问这个左结点(L),此时当这个最左结点的根结点的右结点也为叶结点时,就访问这个根结点(N),出栈,右结点的下面也为空,出栈,访问这个右结点(R),此时栈顶为这个LNR的上一层根结点……
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
TreeNode *p = root;
stack<TreeNode*> stack;
while(p || !stack.empty()){
if(p){
stack.push(p);
p = p->left; //一直向左
}else{ //直到左为空
p = stack.top(); //取出最左
stack.pop();
result.push_back(p->val); //L
p = p->right; //是否上层根节点的右结点也为空,……
}
}
return result;
}
};