中序遍历的顺序是左根右
1.通过递归解决:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> a;
dfs(root,a);
return a;
}
void dfs(TreeNode* root,vector<int> &a){
if(root!=NULL){
dfs(root->left,a);
a.push_back(root->val);
dfs(root->right,a);
}
}
};
2.通过非递归来解决
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> a;
if(root==NULL){
return a;
}
stack<TreeNode*> P;
while(root!=NULL || !P.empty()){
while(root!=NULL){
P.push(root);
root=root->left;
}
if(!P.empty()){
root=P.top();
P.pop();
a.push_back(root->val);
root=root->right;
}
}
return a;
}
};