方法1:递归(用到两个函数)
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
inorder(root,result);
return result;
}
void inorder(TreeNode* root,vector<int>& result){
if(root==NULL)return;
if(root->left) inorder(root->left,result);
result.push_back(root->val);
if(root->right) inorder(root->right,result);
}
方法2:不用递归(栈)
思路:将根节点压入栈,如果根节点一直有左子节点,则一直将左子节点压入栈直到左子节点不存在,然后取栈顶元素,将栈顶元素放入结果中,若存在右子节点,则下次循环的时候将所有的右子节点的左子节点压入栈。访问的顺序就是左-根-右
vector<int> inorderTraversal(TreeNode* root) {
//栈
vector<int> result;
stack<TreeNode*> temp;
TreeNode* p = root;
while(p||!temp.empty()){
while(p){
temp.push(p);
p=p->left;
}
p=temp.top();temp.pop();
result.push_back(p->val);
p=p->right;
}
return result;
}