Тема: Реалізація preorder обходу бінарного дерева за допомогою рекурсії
Просте завдання з LeetCode щодо preorder обходу бінарного дерева.
Написав ось таке рішення:
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
vector<int> answer;
if (root != nullptr) {
answer.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
return answer;
}
};
Але воно не працює як слід. Видає лише перший вузол дерева і все.
А ось таке рішення працює:
class Solution {
void preorder(TreeNode *root, vector<int> &ans) {
if (root != nullptr) {
ans.push_back(root->val);
preorder(root->left, ans);
preorder(root->right, ans);
}
}
public:
vector<int> preorderTraversal(TreeNode *root) {
vector<int> answer;
preorder(root, answer);
return answer;
}
};
Здавалося б, майже однакові рішення, але працює варіант лише
з допоміжною функцією. Чому так?