#include <iostream> #include <cstdio> using namespace std; struct TreeNode{ int data; TreeNode *leftChild; TreeNode *rightChild; }; /** * 二叉搜索树的插入,每次插入返回父节点的data,如果没有父节点则返回-1 * @param data 插入的数据 * @param root 该树的根结点 */ void insertBST(int data, TreeNode * &root){ TreeNode *treeNode = new TreeNode; treeNode->data = data; treeNode->rightChild = NULL; treeNode->leftChild = NULL; if(root == NULL){ //初始树为空 root = treeNode; printf("-1\n"); }else{ //往左边或者右边搜索 TreeNode *curNode = root; TreeNode *preNode = root; while(true){ int curData = curNode->data; if(curData > data){ //往左走 curNode = preNode->leftChild; if(curNode == NULL){ //走到最底部了 preNode->leftChild = treeNode; printf("%d\n", preNode->data); break; }else{ //继续往下走 preNode = curNode; } }else{ //往右走 curNode = preNode->rightChild; if(curNode == NULL){ //走到最底部了 preNode->rightChild = treeNode; printf("%d\n", preNode->data); break; }else{ //继续往下走 preNode = curNode; } } } } } int main() { TreeNode *root = NULL; int n; while(scanf("%d", &n) != EOF){ int i = 0; while(i < n){ int data; scanf("%d", &data); insertBST(data, root); i++; } } }