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

不是很难的题但确实体现了北邮爱考树相关的编程题,从历年的初试题也能看得出来。

用类表示节点,在节点内部定义父节点。

用节点数组按输入顺序存储节点。

在递归创建二叉排序树的时候,记录父节点。

package test;

import java.io.BufferedInputStream;
import java.util.Scanner;
class NODE1{
int value;
NODE1 father;
NODE1 left;
NODE1 right;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public NODE1 getFather() {
return father;
}
public void setFather(NODE1 father) {
this.father = father;
}
public NODE1 getLeft() {
return left;
}
public void setLeft(NODE1 left) {
this.left = left;
}
public NODE1 getRight() {
return right;
}
public void setRight(NODE1 right) {
this.right = right;
}
public NODE1(int value, NODE1 father, NODE1 left, NODE1 right) {
super();
this.value = value;
this.father = father;
this.left = left;
this.right = right;
} }
public class ErchashuMain { public static void main(String[] args) {
Scanner scan = new Scanner (new BufferedInputStream(System.in));
int T = scan.nextInt(); NODE1 root = new NODE1(scan.nextInt(),null, null, null);
NODE1 [] nodes = new NODE1[T];
nodes[0] = root;
root.father = new NODE1(-1,null, null, null);
for(int i=1;i<T;i++){
nodes[i] = new NODE1(scan.nextInt(),null, null, null);
Insert(nodes[i],root);
}
for(int i=0;i<T;i++){ System.out.println(nodes[i].father.value);
}
} private static int Insert(NODE1 tarnode, NODE1 root) {
if(tarnode.value<root.value){
if(root.left!=null){
Insert(tarnode,root.left);
}else{
tarnode.father = root;
root.left = tarnode;
return 1;
} }
if(tarnode.value>root.value){
if(root.right!=null){
Insert(tarnode,root.right);
}else{
tarnode.father = root;
root.right = tarnode;
return 1;
} }
return 1; } }

北邮oj 97. 二叉排序树的更多相关文章

  1. 北邮oj 104. 912星球的研究生

    104. 912星球的研究生 时间限制 1000 ms 内存限制 65536 KB 题目描述 最近912星球的研究生入学了,912星球的教务处因此忙的焦头烂额,要求yzr做一个信息管理系统登陆查询研究 ...

  2. 北邮oj 题

    题目描述 Every year,prince prepares a birthday gift for princess.The gift is a box,which is decorated wi ...

  3. 北邮OJ

    90. 字符串转换 时间限制 1000 ms 内存限制 65536 KB 题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而" ...

  4. 【经验总结】北邮OJ

    90. 字符串转换 时间限制 1000 ms 内存限制 65536 KB 题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而" ...

  5. 北邮OJ 89. 统计时间间隔 java版

    89. 统计时间间隔 时间限制 1000 ms 内存限制 65536 KB 题目描述 给出两个时间(24小时制),求第一个时间至少要经过多久才能到达第二个时间.给出的时间一定满足的形式,其中x和y分别 ...

  6. 北邮14&18年软院机试【参考】答案

    2014 Problem A. 奇偶求和 题目描述: 给定N个数,分别求出这N个数中奇数的和以及偶数的和. 输入格式 第一行为测试数据的组数T(1<=T<=50).请注意,任意两组测试数据 ...

  7. 九度OJ 1201 二叉排序树

    题目地址:http://ac.jobdu.com/problem.php?pid=1201 题目描述: 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n( ...

  8. 北邮新生排位赛2解题报告d-e

    <> 427. 学姐逗学弟 时间限制 3000 ms 内存限制 131072 KB 题目描述 学弟们来了之后,学姐每天都非常高兴的和学弟一起玩耍.这一天,学姐想出了这样一个游戏,她画了一棵 ...

  9. 南邮oj[1401] 乘车费用

    Description lqp家离学校十分十分远,同时他又没有钱乘taxi.于是他不得不每天早早起床,匆匆赶到公交车站乘车到学校.众所周知CZ是个公交车十分发达的地方,但是CZ的公交车十分的奇怪,lq ...

随机推荐

  1. NERDTree快捷键

    切换工作台和目录 ctrl + w + h 光标 focus 左侧树形目录ctrl + w + l 光标 focus 右侧文件显示窗口ctrl + w + w 光标自动在左右侧窗口切换ctrl + w ...

  2. .NET Core 获取程序运行环境信息与反射的应用

    目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...

  3. MySQL多表查询、事务、DCL:内含mysql如果忘记密码解决方案

    MySQL多表查询.事务.DCL 多表查询 * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id ...

  4. 小白学 Python 数据分析(11):Pandas (十)数据分组

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  5. JS 获取一段时间内的工作时长小时数

    本来想是想找轮子的,但是并没有找到能用的,多数都是问题很大,所以就自己写了一个 需求说明 支持自选时间段,即开始时间与结束时间根据用户的上班及下班时间判定返回小时数 技术栈 moment.js 思考过 ...

  6. <select>标签,不要在select标签中写value属性!!!

    <select> select标签,一个选择框标签,在开发中很多时候会用到这个标签,例如选择生日19**年,或者在segmentfault中编辑文章时选择'原创','转载',还是'翻译'等 ...

  7. 日常破解--从XCTF的app3题目简单了解安卓备份文件以及sqliteCipher加密数据库

    一.题目来源     题目来源:XCTF app3题目 二.解题过程     1.下载好题目,下载完后发现是.ab后缀名的文件,如下图所示:     2.什么是.ab文件?.ab后缀名的文件是Andr ...

  8. Chromium的无锁线程模型C++代码示例

    引言 作者:程序员bingo,主要关注客户端架构设计.性能优化.崩溃处理,有多年的Chromium浏览器开发经验. 多线程一直是软件开发中最容易出问题的环节,很多的崩溃.卡死问题都与多线程有关.在常用 ...

  9. 通过nodejs实现文件的上传

    通过nodejs实现文件的上传 主要内容 本文将用来讲述如何通过nodejs进行文件上传,将会涉及到以下知识点: 通过express模块进行服务器的搭建 通过multer模块将上传的文件保存到指定目录 ...

  10. 【原创】(五)Linux进程调度-CFS调度器

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...