97. 二叉排序树

时间限制 1000 ms 内存限制 65536 KB

题目描述

二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树:

  1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值;
  2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值;
  3. 左、右子树本身也是一颗二叉排序树。

现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。

输入格式

第一行,一个数字N(N<=100),表示待插入的节点数。

第二行,N个互不相同的正整数,表示要顺序插入节点的关键字值,这些值不超过108。

输出格式

输出共N行,每次插入节点后,该节点对应的父亲节点的关键字值

输入样例

5
2 5 1 3 4

输出样例

-1
2
2
5
3 分析 : STL中的 set 和 map 都是用二叉排序树实现的,这道题要输出父节点,用这两个不好实现,
解决方法是自己写一个返回父节点的二叉排序树
代码:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
struct node
{
int val;
node *lch,*rch;
}; node *insert(node *p,int x)
{
if(p==NULL)
{
node *q=new node;
q->val=x;
q->lch=q->rch=NULL;
return q;
}
else
{
if(x< p->val)
p->lch=insert(p->lch,x);
else
p->rch=insert(p->rch,x);
return p;
}
} node *find(node *p,int x,node *my)
{
if(p==NULL)
return my;
else if(x==p->val)
return my;
else if(x< p->val)
return find(p->lch,x,p);
else
return find(p->rch,x,p);
} int main()
{
int num,temp[],n;
node *donser=NULL,*don=NULL,*dons=NULL;
scanf("%d",&num);
for(int i=;i<=num;i++)
{
scanf("%d",&n);
donser=insert(donser,n);
temp[i]=n;
}
cout<<"-1"<<endl;
for(int i=;i<=num;i++)
{
dons=find(donser,temp[i],don);
cout<< dons->val <<endl;
}
return ;
}
 

BUPT 2012复试机考 3T的更多相关文章

  1. BUPT 2012复试机考 4T

    题目描述 我们都学习过计算机网络,知道网络层IP协议数据包的头部格式如下: 其中IHL表示IP头的长度,单位是4字节:总长表示整个数据包的长度,单位是1字节.传输层的TCP协议数据段的头部格式如下:  ...

  2. BUPT 2012复试机考 2T

    题目描述 ​给你一个n*n的矩阵, , 求其矩阵的k次幂,即Pk 输入格式 第一行,一个整数T(0<T<=10),表示要求矩阵的个数. 接下来有T组数据,每组数据格式如下: 第一行:两个数 ...

  3. BUPT 2012复试机考 1T

    题目描述 大家都知道,数据在计算机里中存储是以二进制的形式存储的. 有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的. 你能帮帮 ...

  4. 【Java】机考常用知识

    基本操作 数组 声明数组 方法一: int a[] = null; //声明一维数组 //int[] a = null; 也行,个人习惯 a = new int[10];//分配内存给一维数组 方法二 ...

  5. 华科机考:a+b

    时间限制:1秒空间限制:32768K 题目描述 计算a+b的和 每行包行两个整数a和b 对于每行输入对应输出一行a和b的和 输入 1 5 输出 6 吐槽:这尼玛是机考题? 代码: #include & ...

  6. 20150912华为机考2之"输入一段字符串(英文),将每个单词首字母大写后输出"

    还有其他一些(隐性)要求(要不然无法通过测试): .如果首字母已经大写,则不用变 .不是英文字母的不变 e.g. Input: hello world! this is _Ljj speaking! ...

  7. 20150912华为机考1之"输入一个字符串,将其中出现次数最多的字符输出"

    不吐槽华为的服务器了,直接上正文 输入:字符串(英文字母),长度不超过128 输出:出现频率最高的字母 思路写在注释文档 /* Input a string * Output the most fre ...

  8. 华科机考:a+b

    时间限制:1秒     空间限制:32768K 题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据 ...

  9. 华科机考:IP地址

    时间限制:1秒  空间限制:32768K 题目描述 输入一个ip地址串,判断是否合法. 输入描述: 输入的第一行包括一个整数n(1<=n<=500),代表下面会出现的IP地址的个数. 接下 ...

随机推荐

  1. sql 表连接的3种类型

    内连接  inner join (join) 交叉连接  cross join  笛卡尔积 效率低 外连接  outer join  (left join ,right join ,full join ...

  2. docker apache安装

    文章来源: 1.添加镜像 # docker pull httpd2. 2.创建httpd文件 # mkdir /data/httpd2. 3.启动apache # docker run -it -p ...

  3. java获取时间格式

    文章来源:https://www.cnblogs.com/hello-tl/p/9263602.html package com.util; import java.text.SimpleDateFo ...

  4. cdev结构体

    在内核源码include/linux/cdev.h里对cdev结构体的定义: struct cdev { struct kobject kobj; // 内嵌的kobject对象  struct mo ...

  5. nw335 debian sid x86-64 -- 4 realtek 提供的官方驱动

    realtek 提供的官方驱动   1 查看无线网卡的驱动芯片: $ sudo lsusb Bus 001 Device 003: ID 0bda:8176 Realtek Semiconductor ...

  6. python基础——15(加密、excel操作、ini文件操作、xml操作模块及数据格式分类)

    一.加密模块 1.有解密的加密方式(base64) #base64加密 import base64 str_encrypt = input("输入要加密的字符串:\n") base ...

  7. go的相关用法

    1. have gone to和have been to的区别 have gone to和have been to的区别如下: 1.have gone to,第三人称时用 has gone to ha ...

  8. swift写一个简单的列表unable to dequeue a cell with identifier reuseIdentifier - must register a nib or a cla

    报错:unable to dequeue a cell with identifier reuseIdentifier - must register a nib or a class for the ...

  9. 【LeetCode】Powerful Integers(强整数)

    这道题是LeetCode里的第970道题. 题目描述: 给定两个正整数 x 和 y,如果某一整数等于 x^i + y^j,其中整数 i >= 0 且 j >= 0,那么我们认为该整数是一个 ...

  10. [adb 命令学习篇] adb 命令总结

    https://testerhome.com/topics/2565 Android 常用 adb 命令总结 针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb ...