PAT A1099. Build A Binary Search Tree (30) [⼆叉查找树BST]

本文介绍了一种基于二叉搜索树(BST)的层序遍历算法实现。通过定义二叉树结构和使用递归填充节点值,文章详细解释了如何根据输入的树结构和一组唯一整数键来构建并输出该二叉搜索树的层序遍历序列。此过程涉及中序遍历以保持BST特性,并最终按层级顺序输出节点。

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

The left subtree of a node contains only nodes with keys less than the node’s key.
The right subtree of a node contains only nodes with keys greater than or equal to the node’s key.
Both the left and right subtrees must also be binary search trees.
Given the structure of a binary tree and a sequence of distinct integer keys, there is only one way to fill these keys into the tree so that the resulting tree satisfies the definition of a BST. You are supposed to output the level order traversal sequence of that tree. The sample is illustrated by Figure 1 and 2.
在这里插入图片描述
题⽬⼤意:给出⼀棵⼆叉搜索树(给出每个结点的左右孩⼦),且已知根结点为0,求并且给出应该插
⼊这个⼆叉搜索树的数值,求这棵⼆叉树的层序遍历
分析: 1. ⽤结构体data, lef, right, index, level表示这棵树的结构, a数组存树的信息, b数组存这棵
树节点的所有data,根据输⼊可知树a[i]的lef和right
2. 因为是⼆叉搜索树,所以中序遍历这棵树得到的结点顺序应该是给出的数值序列从⼩到⼤的排
列顺序,所以把数值序列排序后,可以在中序遍历的时候直接赋值当前tree[root].data~
3. 然后根据节点的层数和下标,就可以排序输出层序

#include <iostream>
#include <algorithm>
using namespace std;
int n, cnt, b[100];
struct node {
	int data, l, r, index, lebel;
}a[110];
bool cmp(node x, node y) {
	if (x.lebel != y.lebel) return x.lebel < y.lebel;
	return x.index < y.index;
}
void dfs(int root, int index, int lebel) {
	if (a[root].l == -1 && a[root].r == -1) {
		a[root] = {b[cnt++], a[root].l, a[root].r, index, lebel};
	} else {
		if (a[root].l != -1) dfs(a[root].l, index * 2 + 1, lebel + 1);
		a[root] = {b[cnt++], a[root].l, a[root].r, index, lebel};
		if (a[root].r != -1) dfs(a[root].r, index * 2 + 2, lebel + 1);
	}
}

int main() {
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i].l >> a[i].r;
	for (int i = 0; i < n; i++)
		cin >> b[i];
	sort(b, b + n);
	dfs(0, 0, 0);
	sort(a, a + n, cmp);
	for (int i = 0; i < n; i++) {
		if (i != 0) cout << " ";
		cout << a[i].data;
	}
	return 0;
}
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值