利用栈
对一个结点,1.如果左孩子不为空,则入栈,然后访问它左孩子,重复这个过程。2.如果左孩子为空了,取栈顶元素,并pop,访问它的右孩子,将右孩子作为当前结点,进行1的操作。3.直到结点为空且栈为空
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ret;
stack<TreeNode*> s;
TreeNode* p = root;
while(p || !s.empty()){
while(p != NULL){
s.push(p);
p = p -> left;
}
TreeNode* cur = s.top();
s.pop();
ret.push_back(cur->val);
p = cur -> right;
}
return ret;
}
};