//凡是可以用bst解决的都可以用map解决,map底层为红黑树
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
int data;
TreeNode* leftChild;
TreeNode* rightChild;
};
void insertBST(TreeNode*& root, int data) {
TreeNode* pNewNode = new TreeNode;
pNewNode->data = data;
pNewNode->leftChild = NULL;
pNewNode->rightChild = NULL;
if (root == NULL) {
root = pNewNode;
printf("-1\n");
} else {
TreeNode* pPre = root; //当前结点的父亲
TreeNode* pCur; //临时指针
while (true) {
//要插入的结点比当前结点的值小
if (data < pPre->data) {
//用临时指针往左查
pCur = pPre->leftChild;
//临时指针发现父指针没有左孩子 那就插在这
if (pCur == NULL) {
pPre->leftChild = pNewNode;
printf("%d\n", pPre->data);
break;//结束循环
} else {
//有左孩子,将父节点下移,进入下一轮循环
pPre = pCur;
}
}
//要插入的结点比当前结点的值大或等于
else {
// 用临时指针往右查
pCur = pPre->rightChild;
//临时指针发现父指针没有右孩子 那就插在这
if (pCur == NULL) {
pPre->rightChild = pNewNode;
printf("%d\n", pPre->data);
break;
} else {
//有右孩子,将父节点下移,进入下一轮循环
pPre = pCur;
}
}
}
}
}
int main() {
TreeNode* root = NULL;
int n;
while (scanf("%d", &n) != EOF) {
int arrayList[105];
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
insertBST(root, num);
}
}
return 0;
}