3. Consider the following BST insertion code snippet in C++:
struct Node {
int data;
Node* left;
Node* right;
};
Node* insert(Node* root, int val) {
if (!root) {
Node* newNode = new Node{val, nullptr, nullptr};
return newNode;
}
if (val < root->data) root->left = insert(root->left, val);
else root->right = insert(root->right, val);
return root;
}
int main() {
Node* root = nullptr;
root = insert(root, 10);
root = insert(root, 5);
root = insert(root, 15);
root = insert(root, 12);
root = insert(root, 18);
return 0;
}
What is the in-order traversal output of the BST after these insertions?