树结构及其算法-二叉排序树

目录

树结构及其算法-二叉排序树

C++代码


树结构及其算法-二叉排序树

事实上,二叉树是一种很好的排序应用模式,因为在建立二叉树的同时,数据已经经过初步的比较,并按照二叉树的建立规则来存放数据,规则如下:

  1. 第一个输入数据当作此二叉树的树根。
  2. 之后的数据以递归的方式与树根进行比较,小于树根置于左子树,大于树根置于右子树。

从上面的规则可以知道,左子树内的值一定小于树根,而右子树的值一定大于树根。因此,只要利用中序遍历方式就可以得到从小到大排序好的数据,如果想从大到小排序,那么可将最后的结果置于堆栈内,再依次弹出即可。

C++代码

#include<iostream>
using namespace std;struct TreeNode {int data;TreeNode* leftNode;TreeNode* rightNode;TreeNode() {data = 0;leftNode = nullptr;rightNode = nullptr;}TreeNode(int tempData, TreeNode* tempLeftNode = nullptr, TreeNode* tempRightNode = nullptr) {this->data = tempData;this->leftNode = tempLeftNode;this->rightNode = tempRightNode;}
};namespace Tree {TreeNode* CreateTree(int* tempData, int tempSize) {TreeNode* tempTreeNode = nullptr;for (int i = 0; i < tempSize; i++) {TreeNode* currentNode;TreeNode* newNode;int flag = 0;newNode = new TreeNode(tempData[i]);if (tempTreeNode == nullptr)tempTreeNode = newNode;else {currentNode = tempTreeNode;while (!flag) {if (tempData[i] < currentNode->data) {if (currentNode->leftNode == nullptr) {currentNode->leftNode = newNode;flag = 1;}elsecurrentNode = currentNode->leftNode;}else {if (currentNode->rightNode == nullptr) {currentNode->rightNode = newNode;flag = 1;}elsecurrentNode = currentNode->rightNode;}}}}return tempTreeNode;}void Inorder(TreeNode* tempTree) {if (tempTree != nullptr) {Inorder(tempTree->leftNode);cout << tempTree->data << " ";Inorder(tempTree->rightNode);}}
};int main() {int data[]{ 6, 3, 5, 9, 7, 8, 4, 2 };cout << "原始数据:" << endl;for (int i = 0; i < 8; i++)cout << data[i] << " ";cout << endl;TreeNode* treeNode = nullptr;treeNode = Tree::CreateTree(data, 8);cout << "排序结果:" << endl;Tree::Inorder(treeNode);return 0;
}

输出结果

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

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

相关文章

人们常常下定决心“不改变”

"因为我的性格很悲观" 有的人会觉得一些事情发生&#xff0c;是自己性格使然&#xff0c;改变不了。 但其实性格是可以改变的。 这听起来似乎不太现实&#xff0c;自己的性格就是这样&#xff0c;怎么会改变&#xff1f; 那换种表达&#xff0c;我们看待世界的方式可…

源码编译 7z

源码编译 7z 2023.11.04 ChrisZZ 1. 目的 在 macOSX 电脑上&#xff0c;编译 7zip 的控制台应用程序 7zz&#xff0c; 复刻官方给的/homebrew 提供的 7zz 程序。 2. 下载源码 https://www.7-zip.org/a/7z2301-src.tar.xz 3. 查询编译规则描述文件 7zz 是控制台程序&…

【蓝桥每日一题]-倍增(保姆级教程 篇1)

今天讲一下倍增 目录 题目&#xff1a;忠诚 思路&#xff1a; 题目&#xff1a;国旗计划 思路&#xff1a; 查询迭代类倍增&#xff1a; 本质是一个一个选区间使总长度达到 M,类似凑一个数。而我们会经常用不大于它最大的二的次幂&#xff0c;减去之后&#xff0c;再重复这…

element UI DatePicker 日期选择器 点击时间点可选限制范围前后十五天

<el-date-picker v-model"timeRange" type"datetimerange" align"right" :default-timedefaultTimevalue-format"yyyy-MM-dd HH:mm:dd" range-separator"至" start-placeholder"开始日期"end-placeholder"…

编码器的分类

目录 光电编码器 一、增量式编码器 二、绝对式编码器 三、混合式绝对值编码器 四、旋转变压器 五、正余弦伺服电机编码器 光电编码器 光电编码器主要有增量式编码器、绝对式编码器、混合式绝对值编码器、旋转变压器、正余弦伺服电机编码器等&#xff0c;其中增量式编码器…

PackageManagerService初始化

参考资料&#xff1a;PMS 第 1 篇 - PackageManagerService 初始化 这个是基于Android 7的&#xff0c;我看的代码是Android 9 前言 PMS 用来管理所有的 package 信息&#xff0c;包括安装、卸载、更新以及解析 AndroidManifest.xml 以组织相应的数据结构&#xff0c;这些数…

《研发效能(DevOps)工程师》课程简介(三)丨IDCF

在研发效能领域中&#xff0c;【开发与交付】的学习重点在于掌握高效的开发工具和框架&#xff0c;了解敏捷开发方法&#xff0c;掌握持续集成与持续交付技术&#xff0c;以及如何保证应用程序的安全性和合规性等方面。 由国家工业和信息化部教育与考试中心颁发的职业技术证书…

leetCode 322.零钱兑换 完全背包 + 动态规划 + 记忆化搜索 + 递推 + 空间优化 + 画递归树

关于此题我的往期文章&#xff1a;LeetCode 322.零钱兑换 完全背包 动态规划_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/133386579看本期文章时&#xff0c;可以先回顾一下动态规划入门知识和完全背包理论和实战…

面试算法50:向下的路径节点值之和

题目 给定一棵二叉树和一个值sum&#xff0c;求二叉树中节点值之和等于sum的路径的数目。路径的定义为二叉树中顺着指向子节点的指针向下移动所经过的节点&#xff0c;但不一定从根节点开始&#xff0c;也不一定到叶节点结束。例如&#xff0c;在如图8.5所示中的二叉树中有两条…

Nodejs和npm的使用方法和教程

Nodejs简介 Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具&#xff01; &#xff08; 运行环境&#xff0c;是不是很熟悉&#xff0c;对。就是 java JRE&#xff0c;Java 运行时环境&#xff09; Node.js 在浏览器之外运行 V8 Java…

WSL 下载

可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符&#xff0c;方法是右键单击并选择“以管理员身份运行”&#xff0c;输入 wsl --install 命令&#xff0c;然后重启计算机。 首先查看可以下载的版本 最后再运行wsl --ins…

企业电脑屏幕监控有哪些?如何实现电脑屏幕监控

企业电脑屏幕监控有哪些&#xff1f;如何实现电脑屏幕监控 下载使用安企神电脑屏幕监控软件 企业电脑屏幕监控是一种监测和记录员工在工作时间内在他们的计算机上执行的活动的技术。这种监控可以有多种目的&#xff0c;包括确保员工的生产力、确保数据安全性&#xff0c;或满…

【总】HEC-RAS学习记录

【总】HEC-RAS学习记录 目标HEC-RAS简介和下载渠道简介下载渠道指导教程 目标 为了进行溃坝模拟&#xff0c;了解了很多软件&#xff0c;最终决定使用HEC-RAS HEC-RAS简介和下载渠道 简介 HEC-RAS 是美国陆军工程兵团工程水文中心&#xff08;HEC&#xff09;开发的河道水力…

【Qt-22】Qt乱码问题解决

最近在Qt项目中遇到TCP通信接收数据乱码的问题&#xff0c;很是苦恼&#xff0c;经过多次尝试&#xff0c;终于得以解决。 感谢Qt TcpSocket 传递数据乱码显示_qt中socket接受到的客户端数据显示不出来-CSDN博客 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_XX風的博客…

编程新手的犯错之路

第1名&#xff1a;无尽的if-else陷阱 在我刚刚学习编程的时候&#xff0c;我对if-else语句的使用充满了好奇。我曾经写下了这样一个愚蠢的代码块&#xff0c;用来判断一个数字属于哪个范围&#xff1a; if (number > 1 && number < 10) {// 做一些事情 } else …

Open3D(C++) 最小二乘拟合平面(间接平差法)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 1、原理概述 通过传统最小二乘法对点云数据进行平面拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 Z Z

Spring源码编译步骤

Spring源码学习 一、Gradle 为什么下载gradle呢&#xff1f;我们平时不都是用maven吗&#xff1f;原因只有一个&#xff0c;spring源码是用gradle构建的&#xff0c;所以&#xff0c;你想看spring源码必须安装和学会使用gradle&#xff0c;那么&#xff0c;让我们开始gradle之…

[elastic 8.x]java客户端连接elasticsearch与操作索引与文档

初始化客户端 引入相关依赖 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.10.2</version> </dependency>初始化客户端 为了方便演示&#xff0c;我关闭了ela…

微信小程序提示确认框 wx.showModal

核心实现代码如下 wx.showModal({ title: 确认, content: 确定要删除吗&#xff1f;, success (res) { if (res.confirm) { console.log(用户点击确定) } else if (res.cancel) { console.log(用户点击取消) } } })title 是确认框的标题&#xff0c;content 是确认…

GNSS精密解算软件介绍

GAMIT&#xff1a; 美国麻省理工学院&#xff08;MIT&#xff09;和加州大学圣地亚哥分校的海洋研究所&#xff08;SIO&#xff09;开发的GAMIT/GLOBK软件&#xff0c; GAMIT为双差网解&#xff0c;利用双差直接消除卫星及测站的时间误差。 gamit软件介绍-周命端&#xff1a;…