(1)普通递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int>ves;
inorder(root,ves);
return ves;
}
void inorder(TreeNode* node,vector<int>& ves)
{
if(node!=NULL)
{
inorder(node->left,ves);
ves.push_back(node->val);
inorder(node->right,ves);
}
}
};
(2)迭代法
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int>ves;
if(root==NULL){
return ves;
}
using Pair=pair<TreeNode*,int>;
stack<Pair> st;
st.push(Pair(root,0));
TreeNode* p;
while(!st.empty())
{
Pair ptemp=st.top();
p=ptemp.first;
st.pop();
if(p!=NULL){
if(p->right!=NULL){
st.push(Pair(p->right,0));
}
st.push(Pair(NULL,p->val));
if(p->left!=NULL)
{
st.push(Pair(p->left,0));
}
}else{
ves.push_back(ptemp.second);
}
}
return ves;
}
};