#include <iostream> using namespace std; struct tnode { struct tnode* l; struct tnode* r; int val; }; // 初始化节点 struct tnode* initNode(int a) { auto* tmp = (struct tnode*) malloc(sizeof(struct tnode)); tmp->l = nullptr; tmp->r = nullptr; tmp->val = a; return tmp; } // 插入节点到二叉搜索树 int addT(struct tnode* p, int child) { // 如果树为空,创建新节点并插入 if (p == nullptr) { auto* newNode = initNode(child); return newNode->val; // 返回新插入的节点的值 } // 根据二叉搜索树的性质递归插入 if (child < p->val) { if (p->l == nullptr) { p->l = initNode(child); return p->val; } else { return addT(p->l, child); // 递归插入左子树 } } else { if (p->r == nullptr) { p->r = initNode(child); return p->val; } else { return addT(p->r, child); // 递归插入右子树 } } } int main() { int N; struct tnode* root = nullptr; while (cin >> N) { // 处理多个测试用例 for (int i = 0; i < N; i++) { int num; cin >> num; if (root == nullptr) { root = initNode(num); printf("-1\n"); // 第一个节点插入时输出 -1 } else { printf("%d\n", addT(root, num)); // 插入时输出父节点值 } } } return 0; }