问题 A: 二叉排序树 - 文本输出

news2024/11/18 21:47:58

题目描述

给定一个序列,使用该序列生成二叉排序树(也叫二叉搜索树,BST),然后以本题规定方法输出该二叉排序树。
例:
给定一个序列:43 25 29 67 17 88 54 47 35 62
以第一个数字43)为根节点,然后将后面的数字依输入次序逐个添加至该树中,得到一个二叉排序树,如下图所示。

然后先序遍历上面这个树,并按行输出数字。
其中每个子节点的输出前,需要相较于其父节点前多四个普通空格。
当某个节点为叶子节点(即无子节点),则该节点的左右叶子节点均不用输出。
而当某个节点仅有左叶子节点或右叶子节点时,另一个空缺的子节点用#占位。


以该图为例,其最终输出结果为:
43
    25
        17
        29
            #
            35
    67
        54
            47
            62
        88 

输入格式

第一行为正整数n,表示接下来将输入的节点数量。(n<500)
第二行为n个正整数,每个数字以空格分隔(以第一个数字为根节点)

输出格式

以题目描述中的方法输出得到的二叉排序树。
以第一个数字为根节点,然后将后面的数字依输入次序逐个添加至该树中,得到一个二叉排序树。
然后先序遍历该树,并按行输出数字。
其中每个子节点的输出前,需要相较于其父节点前多四个普通空格。
当某个节点为叶子节点(即无子节点),则该节点的左右叶子节点均不用输出。
而当某个节点仅有左叶子节点或右叶子节点时,另一个空缺的子节点用#占位。
 

输入样例

10
43 25 29 67 17 88 54 47 35 62

输出样例  

43
    25
        17
        29
            #
            35
    67
        54
            47
            62
        88

代码展示 

注意题目要求的输出格式

#include<iostream>
#include<bits/stdc++.h>
#include<vector>
#include<utility>
#include<climits>
using namespace std;

struct BiNode{
	BiNode(int aKey){
		key=aKey;
		lchild=rchild=nullptr;
	}
	int key;
	BiNode *lchild,*rchild;
};
using BiTree=BiNode*;

int InitBiTree(BiTree &T){
	T=nullptr;
	return 0;
}


int Insert2(BiTree &T,int aKey){
	//定位插入位置
	BiNode **p=&T;
	while(*p!=nullptr&&(*p)->key!=aKey){
		p=aKey<(*p)->key?&(*p)->lchild:&(*p)->rchild;
	}
	if(*p!=nullptr)
		return 1;
	//插入新结点
	*p=new BiNode(aKey);
	return 0;
}

//test
int InTraverse(BiTree T){
	if(T==nullptr)  return 0;
	InTraverse(T->lchild);
	cout<<T->key<<" ";
	InTraverse(T->rchild);
	return 0;
}

string s="";
void InorderTree(BiTree T){
	cout<<s;
	if(T){
		cout<<T->key<<" ";
		cout<<endl;
		if(T->lchild||T->rchild){
			s+="    ";
			InorderTree(T->lchild);
			InorderTree(T->rchild);
			for(int i=0;i<4;i++)  s.pop_back();
		}
	}
	else{
		cout<<"#"<<endl;
	}
}


int main(){
    //freopen("/config/workspace/test/test","r",stdin);
    int n;
	cin>>n;
	int a[n];
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	BiTree T;
	InitBiTree(T);
	for(int i=0;i<n;i++){
		Insert2(T,a[i]);
	}
	//InTraverse(T);
	InorderTree(T);
    return 0;
}

//闲叙题外话:好奇妙的感觉...!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RFID防盗安全门,自助借还书机,让图书馆发展进入新的里程碑

RFID无线射频识别是一种非接触的自动识别技术&#xff0c;它通过射频信号自动识别目标对象并获取相关数据&#xff0c;可快速进行物品追踪和数据交换&#xff0c;其识别无需人工干预。 RFID作为一种新的技术&#xff0c;它不只是简单的磁条码替代品&#xff0c;它的运作让图书馆…

为什么说新一代BI是“面向业务的可视化分析工具”?

BI工具一直被誉为数据应用的“最后一公里”&#xff0c;其原因在于BI工具可以通过简洁的方式完成数据分析&#xff0c;将数据结果直观的展现给使用者&#xff0c;达到释放数据价值的目的。 然而&#xff0c;传统BI的根本问题在于操作难度大&#xff0c;导致只能专业的IT人员进…

(02)Cartographer源码无死角解析-(33) LocalTrajectoryBuilder2D: 点云数据流向、处理、消息发布等→流程复盘

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

反复重购,资金严重浪费?企业资产需要这样管理

很多企事业资产具有数量大、种类多、价值高、使用周期长、使用地点分散&#xff0c;管理难度大。一些传统固定资产管理软件&#xff0c;痛点丛生&#xff0c;已难于满足企事业需求。 资产管理业务4大现状 01.手段滞后 资产实际的使用状态及状况无法得到及时、准确地反馈。 02.…

「Redis数据结构」RedisObject

「Redis数据结构」RedisObject 文章目录「Redis数据结构」RedisObject一、概述二、结构三、编码方式四、小结五、参考一、概述 redisObject对象非常重要&#xff0c;Redis对象的类型、内部编码、内存回收、共享对象等功能&#xff0c;都需要redisObject支持。 redis 不是一个…

DPDK EAL

DPDK全程是Intel Data Plane Development Kit&#xff0c;是一个数据平面开发集。 DPDK的主要思想 绕过内核&#xff0c;实现Zero Copy使用UIO驱动屏蔽硬中断&#xff0c;并采用PMD主动轮询&#xff0c;减少Cache Miss和切换上下文的开销使用大页内存&#xff0c;减少TLB Mis…

重磅:Docker Desktop正式集成WasmEdge。后者首登GitHubTrending

上周五&#xff0c;Docker Desktop 发布了 4.15 新版本。在这个版本中&#xff0c;Docker Desktop 正式集成了 WasmEdge 的 containerd shim&#xff0c; 并且 Docker Wasm 也从 tech preview 进入到了 beta 阶段。这意味着&#xff0c;1000 万 Docker Desktop 的用户都安装了…

代码安全与质量 | 在这个充满变数的时代,花小钱办大事

在这个充满变数的时代&#xff0c;许多企业都想要提升效率&#xff0c;但如何以同样的时间、人力成本创造出更大的价值&#xff1f;在研发领域&#xff0c;企业选择引入更好的工具来帮助交付高质量代码&#xff0c;比如Sonar&#xff0c;帮助团队充分利用时间&#xff0c;专注于…

Gradle 使用maven本地仓库 带来的思考

Gradle 使用maven本地仓库 带来的思考 本篇主要探究一下 在使用Gradle 的时候一般会配置 maven 的本地仓库的,那是不是Gradle 可以直接使用 maven本地仓库的jar呢 ? 下面来探究一下 思考 当我们在使用Gradle的时候 一配置一个 mavenLocal() 代表它会使用maven的本地仓库, 此时…

独立产品灵感周刊 DecoHack #040 - Google公布2022年度最佳应用榜单

本周刊记录有趣好玩的独立产品设计开发相关内容&#xff0c;每周发布&#xff0c;往期内容同样精彩&#xff0c;感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到&#xff0c;建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。&#x1f4bb; 产品推荐 1. Sensei 这是一…

408真题-2021

死去的记忆正在攻击我&#xff1a; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7aXxWnx-1670222893563)(https://waite1-1307752947.cos.ap-nanjing.myqcloud.com/img/202212051447504.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保…

网络编程之NIO 基础

一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 st…

数据结构与算法之Python实现——栈

在常用的数据结构中&#xff0c;有一批结构被称为容器——栈与队列。 本篇博客主要学习一下栈这种结构的特性&#xff0c;以及用python实现它的相关操作。 内容 顺序栈链栈栈的实际应用 在这之前&#xff0c;我们需要了解一下什么是栈&#xff0c;以及栈这种结构有什么用处&am…

HarmonyOS/OpenHarmony应用开发-DataAbility开发体验

场景介绍 基于Data模板的Ability&#xff08;以下简称“Data”&#xff09;&#xff0c;有助于应用管理其自身和其他应用存储数据的访问&#xff0c;并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的数据共享&#xff0c;也支持跨设备不同应用的数据共享。 Dat…

使用vuedraggable实现拖拽式操作实战

背景 先说下需求&#xff0c;为了提升开发效率和降低开发成本和技术难度&#xff0c;采用低代码方式&#xff0c;通过配置来生成代码&#xff0c;算是代码生成器的升级版解决方案。 对于前端页面&#xff0c;某个业务实体&#xff0c;如系统参数&#xff0c;常见的菜单对应一…

Memcached 未授权访问漏洞验证

Memcached 是一个高性能的分布式内存对象缓存系统&#xff0c;用于动态Web应用以减轻数据库负载。 该服务的端号为&#xff1a;11211 使用绿盟漏洞扫描系统发现某服务器存在Memcached 未授权访问漏洞&#xff0c;如下图所示。 验证方法一&#xff1a; 使用nmap 脚本script-…

ADSP-21489的开发详解:Norflash的编程和烧写

编者的话 Flash 编程与烧写&#xff0c;原本应该是开发的最后一步&#xff0c;当所有程序都做好了&#xff0c;在线编译运行正常&#xff0c;才会通过 Flash 编程&#xff0c;生成二进制的可执行文件 LDR&#xff0c;再通过 JTAG 仿真器将 LDR 文件烧写到 Flash 中&#xff0c…

初探 Vue3 新特性

在本讲中&#xff0c;我们只会概述性的来介绍一下 Vue3 中新增的一些主要内容&#xff0c;而这些主要知识点的详细的使用和功能以及作用&#xff0c;我们会在后面的课程里面逐渐的给大家去解锁。那么明确好了我们的学习目标之后呢&#xff1f; 我们来看一下 Vue3 之中到底新增…

Docker---Docker-compose 安装部署 zentao 禅道

Docker-compose 安装部署 zentao 禅道 目录Docker-compose 安装部署 zentao 禅道一、环境准备1.更换国内源2.拉取zentao的docker镜像3.关闭防火墙4.安装启动docker、docker-compose二、通过yml文件进行部署一、环境准备 1.更换国内源 CentOS7 Base源&#xff1a; wget -O /et…

技术男的春天:小姐姐求助暖男分析

时光荏苒&#xff0c;这个故事发生在4年前&#xff0c;那时候我头发可真厚&#xff0c;坐地铁也不用戴口罩。 小姐姐求助 友圈一位要做毕设的小姐姐在求助postman怎么用&#xff0c;我就帮她解答了一下。 我知道她并非计算机相关专业&#xff0c;所以很奇怪为什么要用postma…