递归:
class Solution {
vector<int> res;
public:
vector<int> inorderTraversal(TreeNode* root) {
if(root){
inorderTraversal(root->left);
res.push_back(root->val);
inorderTraversal(root->right);
}
return res;
}
};
迭代:
class Solution {
vector<int> res;
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
TreeNode *p=root;
vector<int> v;
while(p||s.size()){
while(p){
s.push(p);
p=p->left;
}
p=s.top();s.pop();
res.push_back(p->val);
p=p->right;
}
return res;
}
};
思路:中序遍历,利用栈实现,栈中存储的是中间节点的地址,有一个临时的指针进行遍历,新建一个vactor储存结果。
新建一个存储结果的vector v;
新建一个指向root的指针p;
新建一个存储中间节点地址的stack s;
while(p||s不空){
while(p){
入栈p;
p指向左子树;
}
出栈p;
p入vector;
访问p的右节点;
}