问题描述
二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。 当遇到空子树时,则把该节点放入那个位置。 比如,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实现 蓝桥杯 历届试题 横向打印二叉树的更多相关文章

  1. 算法笔记_189:历届试题 横向打印二叉树(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树 ...

  2. 蓝桥杯 历届试题 PREV-2 打印十字图

    历届试题 打印十字图   时间限制:1.0s   内存限制:256.0MB 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: 对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并 ...

  3. Java实现蓝桥杯历届试题分考场

    历届试题 分考场 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 n个人参加某项特殊考试. 为了公平,要求任何两个认识的人不能分在同一个考场. 求是少需要分几个考场才能满足条件. 输 ...

  4. Java实现蓝桥杯历届试题兰顿蚂蚁

    历届试题 兰顿蚂蚁 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其 ...

  5. Java实现蓝桥杯历届试题回文数字

    历届试题 回文数字 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做: ...

  6. Java实现蓝桥杯历届试题高僧斗法

    历届试题 高僧斗法 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 古时丧葬活动中经常请高僧做法事.仪式结束后,有时会有"高僧斗法"的趣味节目,以 ...

  7. Java实现蓝桥杯历届试题买不到的数目

    历届试题 买不到的数目 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友 ...

  8. Java实现 蓝桥杯 历届试题 斐波那契

    试题 历届试题 斐波那契 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 - (x=1,2) f(x) = f(x-1) ...

  9. Java实现 蓝桥杯 历届试题 小计算器

    历届试题 小计算器 时间限制:1.0s 内存限制:256.0MB 问题描述 模拟程序型计算器,依次输入指令,可能包含的指令有 1. 数字:'NUM X',X为一个只包含大写字母和数字的字符串,表示一个 ...

随机推荐

  1. python 基础知识6-文件操作

    1.只读文件 #以文本打开文件'r' f = open('C:\\Users\\Administrator\\Desktop\\Python\\f.txt',mode='r',encoding='ut ...

  2. Netty 中的粘包和拆包

    Netty 底层是基于 TCP 协议来处理网络数据传输.我们知道 TCP 协议是面向字节流的协议,数据像流水一样在网络中传输那何来 "包" 的概念呢? TCP是四层协议不负责数据逻 ...

  3. 【图论算法】LCA最近公共祖先问题

    LCA模板题https://www.luogu.com.cn/problem/P3379题意理解 对于有根树T的两个结点u.v,最近公共祖先LCA(u,v)表示一个结点x,满足x是u.v的祖先且x的深 ...

  4. mybatis 自动生成代码工具

    配置官网: http://www.mybatis.org/generator/configreference/xmlconfig.html 源码:https://github.com/mybatis/ ...

  5. Jenkins页面操作提示 "No valid crumb was included in the request"

    一.问题描述(Problem Description): 在jenkins中创建新任务时候选择"拷贝已存在任务",点击OK,跳转到下一步时候弹出如下错误信息:"No va ...

  6. 【雕爷学编程】Arduino动手做(52)---MicroSD卡读写模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种 的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准 ...

  7. POJ3903 Stock Exchange LIS最长上升子序列

    POJ3903 Stock Exchange #include <iostream> #include <cstdio> #include <vector> #in ...

  8. linux常用命令---文件拷贝与传输

    拷贝命令 文件传输

  9. easyui及读取xml

    本地测试地址例如http://localhost:6541/TreeExam/AuthorityTree TreeExam 是TreeExamController AuthorityTree是Tree ...

  10. .net System.Web.Mail发送邮件 (设置发件人 只显示用户名)

    http://blog.163.com/hao_2468/blog/static/130881568201141251642215/ .net System.Web.Mail发送邮件 2011-05- ...