D : B DS二叉排序树_树中第k小的元素

Description

给定一个二叉排序树和一个整数k,要求输出树中第k个最小元素(k从1开始计数)。
在这里插入图片描述

Input

第一行输入t,表示有t个测试样例。
第二行起,首先输入n,接着输入n个整数表示一个二叉排序树,接着输入k。
以此类推共输入t个测试样例。
数组形式的二叉树表示方法与题目:DS二叉树_伪层序遍历构建二叉树 相同,输入-1表示空结点。

Output

每一行输出当前二叉排序树的第k个最小元素。
共输出t行。

Sample

#0

Input

45
3 1 4 -1 2
18
5 3 6 2 4 -1 -1 1
31
1
17
55 36 72 15 37 58 79
6

Output

1
3
1
72

Hint

设树中的结点数目为m。
1 <= k <= m
1 <= 结点值

在这里插入图片描述

AC代码

#include <iostream>
#include <vector>
#include <queue>
using namespace std;// 二叉排序树节点
struct TreeNode {int data;TreeNode* left;TreeNode* right;TreeNode(int val) : data(val), left(nullptr), right(nullptr) {}
};// 插入节点到二叉排序树
TreeNode* insert(TreeNode* root, int data) {if (root == nullptr) {return new TreeNode(data);}if (data < root->data) {root->left = insert(root->left, data);}else {root->right = insert(root->right, data);}return root;
}//在二叉排序树中,第一小的数一定在最左下角,其次第二小的数就是第一小的数的爹结点,第三小的数则是第三小的兄弟结点
// 正好符合了中序遍历的顺序
// 中序遍历并将结果存储在数组中
void inorderTraversal(TreeNode* root, vector<int>& result) {if (root != nullptr) {inorderTraversal(root->left, result);result.push_back(root->data);inorderTraversal(root->right, result);}
}// 寻找树中第k个最小元素
int kthSmallest(TreeNode* root, int k) {vector<int> result;inorderTraversal(root, result);return result[k - 1];
}int main() {int t;cin >> t;for (int i = 0; i < t; ++i) {int n;cin >> n;TreeNode* root = nullptr;for (int j = 0; j < n; ++j) {int data;cin >> data;if (data == -1)continue;root = insert(root, data);}int k;cin >> k;int kth = kthSmallest(root, k);cout << kth << endl;}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爱芯派pro通过无线网卡rtl8188eu连接热点

爱芯派pro通过无线网卡rtl8188eu连接热点 爱芯派pro目前的底板的pcie的复位有问题&#xff0c;所以pcie接口无法挂载上去&#xff0c;所以自己购买的rtl8822网卡也用不了&#xff0c;然后想起来自己还有正点原子的rtl8188eu网卡&#xff0c;但是没有和工作人员进行摸索后才知道…

0x26 广搜变形

0x26 广搜变形 1.双端队列BFS 在最基本的广度优先搜索中&#xff0c;每次沿着分支的扩展都记为“一步”&#xff0c;我们通过逐层搜索&#xff0c;解决了求从起始状态到每个状态的最少步数的问题。这其实等价于在一张边权均为1的图上执行广度优先遍历&#xff0c;求出每个点相…

idea 如何使用 JaCoCo 跑覆盖率

背景介绍 什么代码覆盖&#xff1f; 代码覆盖(Code coverage)是软件测试中的一种度量&#xff0c;描述程序中源代码被测试的比例和程度&#xff0c;所得比例称为代码覆盖率。简单来理解&#xff0c;就是单元测试中代码执行量与代码总量之间的比率。 Java常用的单元测试覆盖率…

为什么要用云渲染?3d Max云渲染怎么使用?

云计算技术的兴起让渲染任务的执行更加灵活和高效。借助于云计算服务&#xff0c;影视和动画制作公司能够将大型和资源密集型的渲染任务外包至远程服务器。这些任务在云渲染服务器上按块处理&#xff0c;而更小规模的渲染作业则可在本地工作站上完成。这种作业分配方法大幅优化…

MyBatis的配置文件!!!(properties标签 , typeAliases标签,Mappers标签)

一.将数据库配置信息定义在一个独立的配置文件里。 mybatis-config.xml: <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-co…

【ICCV 2023】MPI-Flow:什么,只需要单张图片就能训练光流估计模型了?

ICCV 2023 | MPI-Flow&#xff1a;从单视角构建的多平面图像中学习光流 引言&#xff1a;主要贡献&#xff1a;Motivation&#xff1a;算法细节&#xff1a;Optical Flow Data GenerationIndependent Object MotionsDepth-Aware Inpainting 实验结果&#xff1a; 来源&#xff…

海外代理IP如何选择?如何避开误区?

近年来&#xff0c;我国互联网商业保持持续发展的状态大环境的优化&#xff0c;大大小小的企业都想乘胜追击&#xff0c;大展宏图&#xff0c;积极推动各项数据业务的进程。 而对于跨境业务来说&#xff0c;代理IP是不可或缺的重要工具之一&#xff0c;市面上代理IP类型众多&a…

由于CUDA OOM,对XLA(HLO)内存分配过程的一点总结

单卡&#xff08;A800, 80GB&#xff09;测试llama7B时出现CUDA OOM&#xff0c;从日志看&#xff0c;是分配preallocated temp allocation时&#xff0c;出现了OOM。从结果上看&#xff0c;XLA module需要的临时内存&#xff0c;需要一次性分配出来&#xff0c;这导致图还未真…

《opencv实用探索·二十一》人脸识别

Haar级联分类器 在OpenCV中主要使用了两种特征&#xff08;即两种方法&#xff09;进行人脸检测&#xff0c;Haar特征和LBP特征。用的最多的是Haar特征人脸检测。 Haar级联分类器是一种用于目标检测的机器学习方法&#xff0c;它是一种基于机器学习的特征选择方法&#xff0c;…

一款双极锁存型霍尔位置传感器

一、产品特点 双极锁存型霍尔效应传感器 宽的工作电压范围: 3.8V~30V 集电极开路输出 最大输出灌电流&#xff1a;50mA 电源反极性保护 工作温度&#xff1a;-40℃~125℃ 封装形式: SOT23-3 TX412是一款集成霍尔效应传感器&#xff0c;主要应用于直流无刷电机的电子信号…

【JAVA】仓库、货架、货物

当前只有添加、查询&#xff0c;没有删除和修改部分&#xff1a; import java.util.LinkedList;class Goods {String id;String name;int price;public Goods(String id, String name, int price) {this.id id;this.name name;this.price price;}Overridepublic String toS…

Kafka为什么能高效读写数据

1&#xff09;Kafka 本身是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高&#xff08;生产消费方并行度高&#xff09;&#xff1b; 2&#xff09;读数据采用稀疏索引&#xff0c;可以快速定位要消费的数据&#xff1b; 3&#xff09;顺序写磁盘&#xff1b; …