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?
思路:
递归和迭代两种版本
1 递归
void inorder(TreeNode *t, vector<int> &result){
if (!t) return;
inorder(t->left, result);
result.push_back(t->val);
inorder(t->right, result);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
inorder(root, result);
return result;
}
纪念贴图:
2 迭代
vector<int> inorderTraversal2(TreeNode* root){
stack<TreeNode*> records;
vector<int> result;
TreeNode *curr = root;
while (curr || !records.empty()){
while (curr){
records.push(curr);
curr = curr->left;
}
curr = records.top(); records.pop();
result.push_back(curr->val);
curr = curr->right;
}
return result;
}
纪念贴图: