横向打印二叉树

蓝桥杯-横向打印二叉树(模拟) 这题好麻烦,目前还没想到可以不保存在数组中直接输出的方法 感觉题目的样例不能准确表明各种格式 大概: 465 32413 1231 45 17 674 14 5756 这组样例(不要在意范围)应该输出 ....|-32413-| ....|.......|......|5756 ....|.......|-1231-| ....|..............|-674 465-| ....|-45-| .........|-17-| ..............|-14 就对了 阅读详情

    第四届蓝桥杯决赛 java高职高专组 第四题

 横向打印二叉树

    二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。

    当遇到空子树时,则把该节点放入那个位置。 

    比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如图1所示。 

    本题目要求:根据已知的数字,建立排序二叉树,并在标准输出中横向打印该二叉树。 

    输入数据为一行空格分开的N个整数。 N<100,每个数字不超过10000。
    输入数据中没有重复的数字。 

    输出该排序二叉树的横向表示。 对应上例中的数据,应输出:

   |-12
10-|
   |-8-|
       |   |-7
       |-5-|
           |-4


    为了便于评卷程序比对空格的数目,请把空格用句点代替:
...|-12
10-|
...|-8-|
.......|...|-7
.......|-5-|
...........|-4

例如:
用户输入:
10 5 20
则程序输出:
...|-20
10-|
...|-5

再例如:
用户输入:
5 10 20 8 4 7
则程序输出:
.......|-20
..|-10-|
..|....|-8-|
..|........|-7
5-|
..|-4


资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗  < 1000ms

import java.util.Scanner;


public class 横向打印二叉树 {
	/**
	 * 节点
	 */
	static class Node{
		//值
		int data;
		Node left;
		Node right;
		//输出的值
		String s;
		public Node(int e){
			this.data=e;
		}
	}
	
	public static void main(String[] args) {
		//int[] n = { 34, 31, 36, 47, 23, 35, 41, 14, 12, 15, 7, 10, 8, 5, 12, 7, 3, 6 };
		int[] n=getInput();
		Node root=new Node(n[0]);
		root.s=root.data+"-|";
		
		for(int i=1;i<n.length;i++){
			Node node=new Node(n[i]);
			if(node.data>root.data){
				addRight(node, root,0);
			}else{
				addLeft(node,root,0);
			}
		}
		
		print(root);
	}
	/**
	 * 接收输入
	 * @return
	 */
	public static int[] getInput(){
		Scanner scan=new Scanner(System.in);
		String s=scan.nextLine();
		String[] ss=s.split(" ");
		int[] nn=new int[ss.length];
		for(int i=0;i<ss.length;i++){
			nn[i]=Integer.parseInt(ss[i]);
		}
		return nn;
	}
	/**
	 * 打印
	 * @param node 根节点
	 */
	public static void print(Node node){
		//始终先打印右节点,然后打印本身,最后打印左节点
		if(node.right!=null){
			print(node.right);
		}
		//如果没有子节点,就不打印后面的"-|“
		if(node.left==null&&node.right==null){
			System.out.println(node.s.substring(0, node.s.length()-2));
		}else{
			System.out.println(node.s);
		}
		if(node.left!=null){
			print(node.left);
		}
	}
	/**
	 * 添加右节点
	 * @param node 子节点
	 * @param root 父节点
	 * @param flag 括号层数(0 只有一层括号,1 有多层括号)
	 */
	public static void addRight(Node node,Node root,int flag){
		if(root.right==null){
			node.s=root.s.replaceAll("[0-9]|-", ".").substring(0, root.s.length()-1);
			if(flag==0){
				int index=node.s.lastIndexOf("|");
				if(index!=-1){
					node.s=node.s.substring(0,index)+"."+node.s.substring(index+1);
				}
			}
			node.s+="|-"+node.data+"-|";
			
			root.right=node;
		}else if(node.data>root.right.data){
			addRight(node, root.right,0);
		}else{
			addLeft(node,root.right,1);
		}
	}
	/**
	 * 添加左节点
	 * @param node 子节点
	 * @param root 父节点
	 * @param flag 括号层数(0 只有一层括号,1 有多层括号)
	 */
	public static void addLeft(Node node,Node root,int flag){
		if(root.left==null){
			node.s=root.s.replaceAll("[0-9]|-", ".").substring(0, root.s.length()-1);
			if(flag==0){
				int index=node.s.lastIndexOf("|");
				if(index!=-1){
					node.s=node.s.substring(0,index)+"."+node.s.substring(index+1);
				}
			}
			node.s+="|-"+node.data+"-|";
			root.left=node;
		}else if(node.data>root.left.data){
			addRight(node, root.left,1);
		}else{
			addLeft(node,root.left,0);
		}
	}
}


分享一个横向打印二叉树图形的方法 最近想起之前大二学数据结构时测试B树时写了一个打印二叉树的C语言函数,现在突然想把它记录一下,改成打印二叉树的Java实现 效果 上图的二叉树打印效果如下 解释一下这个图,将图顺时针旋转90°,看见有两种箭头 短箭头表示这是一个值,即该节点的值 长箭头指向该节点的子树,长箭头在值的左边,则指向左子树,在值的右边则指向右子树 算法分析 这个算法按行打印,每一个节点,子树和值在同一个“平台”上(“平台”只他们在的一条线上),先打印右子树(有的话),再打印值,再打印左子树(有的话),打印子树时,又是按照这 阅读详情

相关推荐

横向打印二叉树 java_分享一个横向打印二叉树图形的方法

分享一个横向打印二叉树图形的方法分享一个横向打印二叉树图形的方法最近想起之前大二学数据结构时测试B树时写了一个打印二叉树的C语言函数,现在突然想把它记录一下,改成打印二叉树的Java实现效果上图的二叉树打印效果如下解释一下这个图,将图顺时针旋转90°,看见有两种箭头短箭头表示这是一个值,即该节点的值长箭头指向该节点的子树,长箭头在值的左边,则指向左子树,在值的右边则指向右子树算法分析这个算法按行打...

weixin_35412669的博客 480

【c++数据结构与算法分析】模板类二叉树横竖打印算法详解

c++数据结构与算法分析、二叉树、打印、算法

kuLong_x的博客 1383

【蓝桥杯】横向打印排序二叉树

算法思想都写在注释里面了,语文表达方面一直是硬伤,若有措辞不当的地方望互相交流。 代码看的一位犇的,原代码没有算法思想讲述和代码注释,我表示我只是进行注释的弱渣。 #include #include #include #include using namespace std; const int maxn = 110; const int maxm = 710; struct nod

用时间去蜕变 4455

蓝桥杯 历届试题 PREV-11 横向打印二叉树 排序二叉树

历届试题 横向打印二叉树 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。 当遇到空子树时,则把该节点放入那个位置。 比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白。 ...|-12 1...

龙少的小窝 1411

钉钉开发(三)——Java推送钉钉待办任务

之前一篇博文中,讲解了如何推送钉钉群消息,感兴趣的可以点击查看。 钉钉开发(一)——Java给钉钉群推送消息

Monten_Cristo的博客 6412

基于RYU+Mininet的SDN校园网络实战:从零搭建虚拟化实验环境

本文详细介绍了如何利用RYU控制器和Mininet搭建SDN校园网络实验环境,从Ubuntu虚拟机准备到网络拓扑设计,再到关键网络功能实现。通过实战案例展示SDN在校园网络中的应用优势,包括简化配置、提升效率等,为网络工程师和学生提供了一套完整的虚拟化实验方案。

weixin_30872499的博客 458

[蓝桥杯]横向打印二叉树 Python满分解法

[蓝桥杯]横向打印二叉树 Python满分解法 #树的结点类定义 class Node: def __init__(self,left=0,right=0,w=0,line=0,leng=0): self.left=left self.right=right self.w=w self.line=line self.leng=leng class Solution: def printTree(self,nu

qq_48081868的博客 489

cellranger安装以及使用

接受cellranger count的输出数据,将同一组的不同测序样本的表达矩阵整合在一起,比如tumor组原来有4个样本,PBMC组有两个样本,现在可以使用aggr生成最后的tumor和PBMC两个矩阵,并且进行标准化去掉测序深度的影响。但是由于病毒基因组太小了,且注释结果只有CDS没有exon,所以曲线救国,将CDS整体替换为exon,也不进行过滤了,直接下一步。虽然安装完毕,但是现在要运行cellranger的话需要在终端输入cellranger的整个路径。自动执行这个命令,需要将“

m0_59974475的博客 9397

数据结构实验之——二叉树层序遍历和竖向打印(超简易)

二叉树的层序遍历和竖向打印说明代码部分测试用例 说明 在这里二叉树的输入方式依旧是根左右,空子树用’ ^ '代替,不清楚的朋友可以简单预览:二叉树表达方式 二叉树的层序遍历在这里是利用队列来实现,而二叉树的竖向打印实际上就像逆序中序遍历一样,这部分的内容并不是很难,大家可以参考。 代码部分 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #inc

Xmumu_的博客 1899

FortiOS路径遍历漏洞CVE-2022-41328实战复现:从环境搭建到漏洞利用全记录

本文深入解析FortiOS路径遍历漏洞CVE-2022-41328,从漏洞背景、影响范围到技术原理进行全面剖析。提供详细的漏洞复现环境搭建步骤和实战利用方法,并给出官方修复方案与临时缓解措施,帮助企业有效防御此类防火墙漏洞风险。

weixin_30485379的博客 525

DA14531-蓝牙温度传感器-真实案例

传感器低功耗系统功能需求: 1)平时为关机状态,通过GPIO管脚唤醒,霍尔器件触发拉低IO唤醒系统。 2)唤醒后,进入BLE广播状态,等待主机连接,若一分钟无被主机连接,则进入关机状态。 3)连接后(0.1mA),每秒上报一次温度值,同时主机可以读取设备读电池电量。 4)连接断开后,1分钟后,设备进入关机(1uA)。 5)LED灯在连接时点亮,断开灭,低电量时会闪,提示闪烁。

hejinwu1314的博客 858

历届试题 横向打印二叉树  (排序二叉树)

历届试题 横向打印二叉树 时间限制:1.0s 内存限制:256.0MB 问题描述 二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。 当遇到空子树时,则把该节点放入那个位置。 比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白。 ...|-12 1...

qq_42794545的博客 595

STM32F4 Flash数据的保存和读取。

STM32F4 Flash数据的保存和读取。

张一西的博客 9216

横向打印二叉树 java_按树状横向打印二叉树

问题假设以二叉链表存储的二叉树中,每个结点所含数据元素均为单字母。 要求实 现二叉树的横向显示问题,如下图所示打印结果。问题分析(1) 二叉树的横向显示应是二叉树竖向显示的90°旋转。分析上图可知,这种树形打印格式要求先打印右子树,再打印根,最后打印左子树,按由上而下顺序看,其输出的结点序列为:CFEADB,这恰为逆中序遍历。所以横向显示二叉树的算法为先右子树、再跟结点、再左子树的RDL结构。(2...

weixin_36255517的博客 829

PyTorch实战(13)——图卷积网络(Graph Convolutional Network,GCN)

图卷积网络 (Graph Convolutional Network, GCN) 模型能够同时结合节点级特征和图级(邻域)信息进行分类,显著提升了图数据建模能力,适用于节点分类、图分类等多种任务。本节中,我们通过 PyTorch Geometric 库在 CiteSeer 图数据集上构建模型,们首先用前馈神经网络作为基线模型完成节点分类任务,随后用 GCN 模型替代前馈网络显著提升了分类准确率。

盼小辉丶的博客 3317

在 ABAP SEGW OData 服务里,把 Function Import 参数长度校验真正跑起来

SAP Gateway服务中Function Import参数长度校验的实现机制解析:在SEGW中定义Max Length参数后,需通过模型特性USE_STRICT_FUNCTION_PARAM_CHK(7.52+版本支持)启用严格检查。该特性需在MPC_EXT的DEFINE方法中设置,框架会在URI解析阶段拦截超长参数,避免错误进入业务逻辑。对于低版本系统,建议在应用层手动添加校验。这种模型驱动的方式符合Clean Core原则,能有效提升接口健壮性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 494

java横向打印二叉树_横向打印二叉树

历届试题 横向打印二叉树时间限制:1.0s 内存限制:256.0MB问题描述二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。当遇到空子树时,则把该节点放入那个位置。比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白。...|-1210-|...|-8-|.......|...|-7....

weixin_33823399的博客 205

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java横向打印二叉树_按树状横向打印二叉树

问题假设以二叉链表存储的二叉树中,每个结点所含数据元素均为单字母。 要求实 现二叉树的横向显示问题,如下图所示打印结果。问题分析(1) 二叉树的横向显示应是二叉树竖向显示的90°旋转。分析上图可知,这种树形打印格式要求先打印右子树,再打印根,最后打印左子树,按由上而下顺序看,其输出的结点序列为:CFEADB,这恰为逆中序遍历。所以横向显示二叉树的算法为先右子树、再跟结点、再左子树的RDL结构。(2...

weixin_42510768的博客 583

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

横向打印二叉树 java_横向打印二叉树

问题描述二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。当遇到空子树时,则把该节点放入那个位置。比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白。...|-1210-|...|-8-|.......|...|-7.......|-5-|...........|-4本题目要求:根据已知的...

weixin_29224309的博客 282

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: NYOJ21 三个水杯
云一样飘过
博客等级 码龄14年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值