Java实现 蓝桥杯 历届试题 横向打印二叉树
问题描述
二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。
当遇到空子树时,则把该节点放入那个位置。
比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白。
...|-12
10-|
...|-8-|
.......|...|-7
.......|-5-|
...........|-4
本题目要求:根据已知的数字,建立排序二叉树,并在标准输出中横向打印该二叉树。
输入格式
输入数据为一行空格分开的N个整数。 N<100,每个数字不超过10000。
输入数据中没有重复的数字。
输出格式
输出该排序二叉树的横向表示。为了便于评卷程序比对空格的数目,请把空格用句点代替:
样例输入1
10 5 20
样例输出1
...|-20
10-|
...|-5
样例输入2
5 10 20 8 4 7
样例输出2
.......|-20
..|-10-|
..|....|-8-|
..|........|-7
5-|
..|-4
import java.util.Scanner;
public class Main {
public static int root;
public static point[] tree = new point[10005];
static class point {
public int value; //自身节点编号
public int father; //父母节点编号
public int left; //左孩子节点编号
public int right; //右孩子节点编号
public point() {
this.value = 0;
this.father = 0;
this.left = 0;
this.right = 0;
}
}
public void dfs(int start, String s, int n, String s1) {
if(tree[start].value == root)
s = s + tree[start].value;
else {
s = s + "-|-";
s = s + tree[start].value;
}
if(tree[start].right > 0) {
s1 = s1 + "1";
dfs(tree[start].right, s, n + 1, s1);
s1 = s1.substring(0, s1.length() - 1);
}
int len = s.length();
int cot = 0;
for(int i = 0;i < len;i++) {
if(s.charAt(i) == '|') {
if(s1.length() <= cot + 1 || s1.charAt(cot) != s1.charAt(cot + 1))
System.out.print("|");
else
System.out.print(".");
cot++;
} else if(cot < n) {
System.out.print(".");
} else {
System.out.print(s.charAt(i));
}
}
if(tree[start].left > 0 || tree[start].right > 0)
System.out.print("-|");
System.out.println();
if(tree[start].left > 0) {
s1 = s1 + "0";
dfs(tree[start].left, s, n + 1, s1);
s1 = s1.substring(0, s1.length() - 1);
}
}
public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
String A = in.nextLine();
String[] arrayA = A.split(" ");
root = Integer.valueOf(arrayA[0]);
for(int i = 0;i < tree.length;i++)
tree[i] = new point();
for(int i = 0;i < arrayA.length;i++) {
int a = Integer.valueOf(arrayA[i]);
tree[a].value = a;
}
for(int i = 1;i < arrayA.length;i++) {
int a = Integer.valueOf(arrayA[i]);
int temp = root;
while(true) {
if(a > temp) {
if(tree[temp].right == 0) {
tree[temp].right = a;
break;
} else
temp = tree[temp].right;
}
else {
if(tree[temp].left == 0) {
tree[temp].left = a;
break;
} else
temp = tree[temp].left;
}
}
}
String s = "";
String s1 = "";
test.dfs(root, s, 0, s1);
}
}
Java实现 蓝桥杯 历届试题 横向打印二叉树的更多相关文章
- 算法笔记_189:历届试题 横向打印二叉树(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树 ...
- 蓝桥杯 历届试题 PREV-2 打印十字图
历届试题 打印十字图 时间限制:1.0s 内存限制:256.0MB 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: 对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并 ...
- Java实现蓝桥杯历届试题分考场
历届试题 分考场 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 n个人参加某项特殊考试. 为了公平,要求任何两个认识的人不能分在同一个考场. 求是少需要分几个考场才能满足条件. 输 ...
- Java实现蓝桥杯历届试题兰顿蚂蚁
历届试题 兰顿蚂蚁 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其 ...
- Java实现蓝桥杯历届试题回文数字
历届试题 回文数字 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做: ...
- Java实现蓝桥杯历届试题高僧斗法
历届试题 高僧斗法 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 古时丧葬活动中经常请高僧做法事.仪式结束后,有时会有"高僧斗法"的趣味节目,以 ...
- Java实现蓝桥杯历届试题买不到的数目
历届试题 买不到的数目 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友 ...
- Java实现 蓝桥杯 历届试题 斐波那契
试题 历届试题 斐波那契 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 - (x=1,2) f(x) = f(x-1) ...
- Java实现 蓝桥杯 历届试题 小计算器
历届试题 小计算器 时间限制:1.0s 内存限制:256.0MB 问题描述 模拟程序型计算器,依次输入指令,可能包含的指令有 1. 数字:'NUM X',X为一个只包含大写字母和数字的字符串,表示一个 ...
随机推荐
- java-> 分包分层
项目分层(分包)的作用 程序为什么要分包分层? 以顾客去饭店吃饭案例分析一下: 小饭店: 一个服务员搞定(接待顾客\点菜\炒菜) 大饭店: 迎宾员(是否有预定\ 询问吃中餐还是西餐或者烧烤等\ 几位用 ...
- Codeforces 832D(Misha, Grisha and Underground,LCA)
题意:在一棵生成树上,给出了三个点,求三个点之间最大的相交点数,CF难度1900. 题解:求出三个lca,并取深度最大的那个,就是我们要的三岔路口K,然后分别求出K到a,b,c三点的路径长度,取最大值 ...
- Docker之save、load、export、import命令
Docker的镜像和容器可以有两种方式导出 1.Docker save #ID or #Name 2.Docker save #ID or #Name docker save和docker expor ...
- 【雕爷学编程】Arduino动手做(50)---W25Q64存储模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- 观察者模式C++实现
#include <iostream> #include <vector> #include <string> using namespace std; typed ...
- DRF版本组件
1.DRF版本组件配置类局部使用 局部配置: 方式一:直接配置versioning_class=QueryParameterVersioning 方式二:直接配置versioning_class=UR ...
- mysql小白系列_08 zabbix3.2.6概念及部署
一 zabbix功能简介 1.zabbix三大监控组件 zabbix server web gui database zabbix_server zabbix proxy agent client 2 ...
- WARN: Establishing SSL connection without server’s identity verification is not recommended
问题 使用Spring JDBC 连接 MySQL时,出现如下警告: WARN: Establishing SSL connection without server's identity verif ...
- CF922F Divisibility
题目链接:http://codeforces.com/contest/922/problem/F 题目大意: 对于一个数集 \(I\),定义 \(f(I)\) 为 \(I\) 中满足条件的数对\((a ...
- SQL server数据库的密码策略与登录失败锁定策略
SQL server数据库本身没有密码复杂度策略设置,它是使用Windows操作系统的校验函数来校验账户密码的,所以查看SQL server数据库密码复杂度需要结合操作系统本地安全策略的密码策略来看. ...