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为一个只包含大写字母和数字的字符串,表示一个 ...
随机推荐
- 2018-06-20 js字符串函数
str.length -> 字符串长度; str.indexOf() -> 从左边查找字符串中某字符的位置: str.lastIndexOf -> 从右边查找字符串中某字符的位置: ...
- day_02~day_09的Python语法基础
Python基础学习 day_02 使用方法修改字符串的大小写 将字符串首字母变成大写 >>> name = "ada lovelace" >>> ...
- JMeter基于HTML测试报告的生成
1第一步: 下载ant,搭建ant环境(path的环境变量) 在path中添加ANT_HOME\bin 验证是否搭建成功Lcmd中输入ant 提示这个说明搭建成功. 第二步: 1.jmerer的目录C ...
- centos6 升级gcc 无法识别的命令行选项“-std=gnu++1y”的解决办法
npm install 提示: 1.下载源文件,并安装: wget http://people.centos.org/tru/devtools-2/devtools-2.repo mv devtool ...
- 「雕爷学编程」Arduino动手做(31)——ISD1820语音模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- Redis设计原理简介
学完MySQL InnoDB之后,又开始学习和研究Redis. 首先介绍下书:<Redis设计与实现>第二版 黄健宏著,机械工业出版社,388页,基于redis3.0版本.版本有点低,这个 ...
- UVA 11651
题目链接:https://cn.vjudge.net/problem/UVA-11651 解题思路: 思路来源于网络. DP + 矩阵快速幂. 设 dp[i][j] 为满足 score 为 i 且最后 ...
- 【MySQL】详细说下MySQL删除数据的过程是什么样的?
drop table 这里先介绍一下[InnoDB]存储表空间概念: Innodb存储引擎,可将所有的数据库数据存放于[ibdata1]的共享表空间:也可以将每张表存放于独立的.idb文件的独立表空间 ...
- ExtJS动态改变字体颜色
为按钮设置文本属性,用标签包裹变色. //pButton为按钮IDExt.getCmp('pButton').setText('<span style="color:#FF0000;& ...
- TP5.0登录验证码实现
<div class="loginbox-textbox"> <input class="form-control" placeholder= ...