Given a binary tree, return the inorder traversal of its nodes’ values.
Example:
Input: [1,null,2,3]
1
2
/
3
Output: [1,3,2]
Follow up: Recursive solution is trivial, could you do it iteratively?
*中文大意:树的中序遍历
解法一:递归(可以视为一个模型)
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> nodes;
inorder(root,nodes);
return nodes;
}
private:
void inorder(TreeNode* root,vector<int>& nodes){
if(!root)
return;
inorder(root->left,nodes);
nodes.push_back(root->val);
inorder(root->right,nodes);
}
};
解法二:用栈
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
TreeNode *p=root;
while(p!=NULL||!s.empty()){
while(p!=NULL){
s.push(p);
p=p->left;
}
if(!s.empty()){
TreeNode* t=s.top();
res.push_back(t->val);
s.pop();
p=t->right;
}
}
return res;
}
};