C : DS二叉排序树之删除

Description

给出一个数据序列,建立二叉排序树,并实现删除功能

对二叉排序树进行中序遍历,可以得到有序的数据序列

Input

第一行输入t,表示有t个数据序列

第二行输入n,表示首个序列包含n个数据

第三行输入n个数据,都是自然数且互不相同,数据之间用空格隔开

第四行输入m,表示要删除m个数据

从第五行起,输入m行,每行一个要删除的数据,都是自然数

以此类推输入下一个示例

Output

第一行输出有序的数据序列,对二叉排序树进行中序遍历可以得到

从第二行起,输出删除第m个数据后的有序序列,输出m行

以此类推输出下一个示例的结果

Sample

#0

Input

1
6
22 33 55 66 11 44
3
66
22
77

Output

11 22 33 44 55 66 
11 22 33 44 55 
11 33 44 55 
11 33 44 55 

在这里插入图片描述

AC代码

#include <iostream>
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;
}// 寻找最小值节点
TreeNode* findMin(TreeNode* node) {//不断往左树找,直到空为止就是最小的while (node->left != nullptr) {node = node->left;}return node;
}// 删除节点
TreeNode* remove(TreeNode* root, int data) {if (root == nullptr) {return root;}// 不断寻找结点if (data < root->data) {root->left = remove(root->left, data);}else if (data > root->data) {root->right = remove(root->right, data);}else {// 节点找到//结点有一个或没有的情况if (root->left == nullptr) {//左手空,直接把右手接上TreeNode* temp = root->right;delete root;return temp;}else if (root->right == nullptr) {TreeNode* temp = root->left;delete root;return temp;}// 有两个子节点的情况// 去右手找到最小的结点TreeNode* temp = findMin(root->right);//用这个右手上找到的最小的来替换当前结点root->data = temp->data;//替换完了之后记得把temp删掉root->right = remove(root->right, temp->data);}return root;
}// 中序遍历并输出结果
void inorderTraversal(TreeNode* root) {if (root != nullptr) {inorderTraversal(root->left);cout << root->data << " ";inorderTraversal(root->right);}
}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;root = insert(root, data);}inorderTraversal(root);cout << endl;int m;cin >> m;for (int k = 0; k < m; ++k) {int deleteData;cin >> deleteData;root = remove(root, deleteData);inorderTraversal(root);cout << endl;}}return 0;
}

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

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

相关文章

vue-springboot-java电力员工安全施工培训课程考试管理系统

本电力员工安全施工培训管理系统是为了提高员工查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了员工和管理员这二者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;…

Ubuntu 常用命令之 zip 命令用法介绍

Ubuntu系统下的zip命令是用来压缩文件的。这个命令可以将一个或多个文件或者目录压缩成一个.zip文件&#xff0c;也可以将整个目录树压缩成一个.zip文件。 zip命令的基本格式 zip [选项] [压缩文件名] [要压缩的文件或目录...]zip命令的主要参数有 -r&#xff1a;递归压缩&a…

2023年12月20日雄县采样

刚去的时候&#xff0c;找不着冬小麦地&#xff0c;因为积雪太厚了&#xff0c;小麦都被埋住了。 翻了几波地失败了几个点&#xff0c;也渐渐得出经验了&#xff0c;像下图这种有田垄的大块连成片农田&#xff0c;“高标准”农田。一定是种植小麦的。 刨开土能看到小麦就和挖到…

C语言——内存函数的使用与模拟实现

大家好&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing 原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各位…

暴雨AI服务器:推动大模型算力底座发展

语言大模型作为人工智能领域的重要分支&#xff0c;其强大的自然语言处理能力和模仿人类的对话决策能力&#xff0c;正逐渐成为人们的关注焦点。近日&#xff0c;据央视新闻报道&#xff0c;工业和信息化部赛迪研究院数据显示&#xff0c;今年我国语言大模型市场规模实现较快提…

25 在Vue3中使用生命周期函数

概述 Vue 组件生命周期事件发生在组件从创建到删除的生命周期中。必要时&#xff0c;我们可以在组件生命周期的每个阶段添加回调和副作用。 组件事件触发顺序 setup 该事件在所有其他钩子&#xff08;包括 beforeCreate&#xff09;之前运行。它无法访问此实例&#xff0c;…

一步步教你创建酒店预订小程序

如果你想为你的酒店或旅馆创建一个预订小程序&#xff0c;这篇文章将为你提供详细的步骤和指南。我们将按照以下顺序进行&#xff1a; 一、进入乔拓云网后台 首先&#xff0c;打开乔拓云网的官方网站&#xff0c;点击右上角的“登录”按钮&#xff0c;登录成功后&#xff0c;点…

【Docker】基础篇

文章目录 Docker为什么出现容器和虚拟机关于虚拟机关于Docker二者区别&#xff1a; Docker的基本组成相关概念-镜像&#xff0c;容器&#xff0c;仓库安装Docker卸载docker阿里云镜像加速docker run的原理**为什么容器比虚拟机快**Docker的常用命令1.帮助命令2.镜像相关命令3.容…

FIO测试参数与linux内核IO栈的关联分析-part1

一、Linux IO栈 一个常见Linux IO处理流程示意图如下&#xff1a; 这个示意图主要描述了Linux系统中I/O请求的处理流程&#xff0c;涉及了I/O接口、文件系统、块层、NVMe驱动等多个部分&#xff0c;整个IO流程处理主要概括以下步骤&#xff1a; 1. 应用程序&#xff08;Appli…

字符串函数内存函数(从零到一)【C语言】

长度不受限制的字符串函数&#xff1a;strcpy,strcat,strcmp 长度受限制的字符串函数&#xff1a;strncpy,strncat,strncmp strlen strlen函数是库函数中我们最常使用的函数&#xff0c;它可以求出字符串的长度(不包含‘\0’) 使用方法 通过前面对strlen函数的模拟实现我们知…

c语言力扣题目:消失的数字(有关时间复杂度O(N²)O(N))以及对异或操作符的更深入的理解(如何用人脑的十进制去考量二进制)

目录 Way One :暴力求解,时间复杂度为 O(N) 代码1 Way Two : 时间复杂度限制到 O(N) 代码及其详解 如题 Way One :暴力求解,时间复杂度为 O(N) 大体思路:比如这里我们需要处理的整型数组是"3,0,1",我们可以用冒泡排序或者 qsort函数将他从大到小进行排序成"…

【数组Array】力扣-1094 拼车

目录 题目描述 解题过程 题目描述 车上最初有 capacity 个空座位。车 只能 向一个方向行驶&#xff08;也就是说&#xff0c;不允许掉头或改变方向&#xff09; 给定整数 capacity 和一个数组 trips , trip[i] [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassen…