【模板】二叉排序树

二叉排序树生成 用C++实现二叉排序树平衡化, 利用伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由Daniel Sleator和Robert Tarjan创造。它的优势在于不需要记录用于平衡树的冗余信息。在伸展树上的一般操作都基于伸展操作。 立即下载

二叉排序树的定义:

(1)对于任何一个结点,如果左子树不空,其左子树的所有节点的关键字均小于它的根节点的关键字。

(2)对于任何一个结点,如果右子树不空,其右子树的所有节点的关键字均大于它的根节点的关键字。

(3)它的左子树、右子树都是二叉排序树。

二叉排序树的特性:

其中序遍历将得到的序列是从小到大的序列。

二叉排序树的查找:

只要关键字不相等,且当前节点不为空树就继续搜索。当小于当前节点关键字时,搜索左子树,当大于时,搜索右子树。(下面的代码没有对不存在该关键字的情况处理,所以此时输出的实际上是其插入后的双亲结点)

二叉排序树的插入:

 原理和上述类似,区别在于其采用递归。当搜索到空节点时,说明找到了插入位置,此时要动态分配内存建立新节点并插入。注意要返回当前的根节点,否则之后的调用会错误(仍然是空树)。

下面代码记录了插入结点时的双亲结点和查找结点时的双亲结点。

#include<iostream>
#include<cstring>
#include<cstdlib> 
using namespace std;
struct Node{
	int data;
	Node* left;
	Node* right;
}; 
Node* Search(Node* T,int &key,int &f){
	while(T!=NULL&&key!=T->data) 
	{
		if(key<T->data)
		{
			f = T->data;//将当前的结点关键字记录下来 
			T=T->left;//搜索左子树 
		}
		else
		{
			f = T->data;//将当前的结点关键字记录下来
			T=T->right;//搜索右子树 
		}
	}
	return T;//返回双亲节点 
} 
Node* Insert(Node* T,int newKey,int &f){
//根节点、新节点的关键字、引用f(记录加入结点的双亲结点,全局变量) 
//引用f是为了在整个递归期间只有一个 
	if(T==NULL){
		T=(Node*)malloc(sizeof(Node));//动态分配结点内存 
		T->data = newKey;
		T->left = T->right = NULL;
	}
	else if(newKey<T->data){//小于关键字 
		f = T->data;//接下来以左孩子为根插入,记录当前双亲结点 
		T->left = Insert(T->left,newKey,f);
	}
	else{
		f = T->data;//接下来以有孩子为根插入,记录当前双亲结点 
		T->right = Insert(T->right,newKey,f);
	}
	return T;//返回当前根结点
}
int main(void){
	int n;
	while(scanf("%d",&n)!=EOF){
		Node* root=NULL;//根节点 
		int newKey;
		for(int i=0;i<n;i++){
			int f=-1;
			scanf("%d",&newKey);
			root = Insert(root,newKey,f);//必须返回根节点,不然出下次插入时根节点还是NULL 
			printf("%d\n",f);
		}
		int k;
		scanf("%d",&k);//查找k次 
		int searchKey;
		for(int i=0;i<k;i++){
			int f=-1;
			scanf("%d",&searchKey);
			Search(root,searchKey,f);
			printf("%d\n",f);
		}
	}
	return 0; 
} 

 

排序二叉树模板实现 我自己写的排序二叉树,使用模板,经过g++正确编译 立即下载

相关推荐

二叉排序树及其应用

二叉排序树及其应用(算法与数据课程设计)

二叉树模板

1.前中后序遍历 void treeTraverse(TreeNode* root) { // 前序 DLR treeTraverse(root->left); // 中序 LDR treeTraverse(root->right); // 后序 LRD } 2.深度优先搜索 void treeDepthFirstTraverse(TreeNode* root) { vector<TreeNode*> nodeVec; // 节点栈 nodeVec.push_back

机器人视觉感知 569

二叉排序树

输入二叉树信息建立二叉树,用四种方法遍历该二叉树,求该二叉树的结点个数和高度,求某结点的父结点

算法22:二叉树各种算法——万能模板

二叉树算法的固定模板

街头小瘪三的专栏 537

C++模板类二叉查找树的实现

这个程序实现了二叉查找树的删除,增加,先序遍历,后序遍历,中序遍历,还有一些非递归和层次遍历!

高效管理Node.js版本与pnpm安装全攻略

本文提供了一套高效管理Node.js版本与pnpm安装的完整攻略。针对开发中常见的版本冲突和磁盘空间问题,详细介绍了如何在Windows和Ubuntu系统上安装并配置pnpm,并重点讲解了如何利用其内置的`pnpm env`命令进行Node.js版本管理,实现一站式环境管理,提升开发效率。

weixin_28840591的博客 313

二叉搜索树(二叉排序树、二叉查找树)详细图解+代码

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树

机会是给有准备的人 4903

OASIS协议标准文档的解读_第一部分

OASIS标准协议的文档的解读。完整原协议的中文翻译和解读。

洋葱的专栏 4903

数据结构-二叉排序树(图文详细版)

二叉排序树

淡沫初夏zz的博客 6万+

DLMS-Blue-Book蓝皮书—曲线类

attribute_index 1 指的是第 1 个属性(即 logical_name),attribute_index 2 指的是第 2 个属性,等等;如果其他“曲线通用类”对象捕获了这个缓冲区,它们的缓冲区也将被清空,以保证它们的缓冲区条目是同质的。如果捕获对象是曲线通用类的缓冲区,则 data_index 标识缓冲区(即列)中的捕获对象(即内部曲线通用类中的列);如果曲线通用类已排序,则调用捕获方法将把新条目存储在缓冲区中的适当位置,移动所有后续条目,并可能丢失最不相关的条目。

一个bug是bug,多个bug能work 1452

Unity 升级 xLua 版本,编译不同平台链接库

Unity 升级 xLua 详解

LymanCao的专栏 1800

二叉排序树(模板)

使用malloc函数,需要调用头文件# include <malloc.h> malloc函数的作用是动态分配内存,以解决静态内存定长、不能手动释放等缺陷。 malloc的使用方法: int *p = (int *)malloc(sizeof(int)); *p = 1; free(p); 其中,p为一个整型指针变量,由int *p = (int*)malloc(sizeof(int))可以看出来,这句话在给*p分配内存. malloc函数支持一个形参(该形参就是字节大小),而si

今天会营业的博客 521

Qt QWebEngine实战:手把手教你将Vue3/React前端项目嵌入C++桌面程序

本文详细介绍了如何利用Qt的QWebEngine模块将Vue3/React前端项目无缝嵌入C++桌面程序,实现现代前端框架与原生C++的深度整合。通过环境准备、项目架构设计、前端适配、Qt端集成、双向通信建立及性能优化等步骤,开发者可以高效构建兼具Web灵活性和本地系统能力的混合应用。

weixin_28736355的博客 390

二叉排序树(模板类)

根据《算法导论》实现的二叉排序树 #include <iostream> template<typename KeyType> class TreeNode { typedef KeyType _KeyType; typedef TreeNode* _NodePtr; typedef TreeNode& _NodeRef; public: TreeNode() { _left = NULL; _right = NU

ly_chg的专栏 701

6.4 直流无刷电机(BLDC):测试与性能评估

本文系统阐述了直流无刷电机(BLDC)的测试与性能评估方法,涵盖参数测量、性能测试、测试平台设计及可靠性评估。详细介绍了绕组电阻、电感和反电动势的测量原理与修正方法,以及转矩-转速特性、效率分析和动态响应测试的技术要点。通过搭建高精度测功机系统,结合自动化数据处理,实现对电机性能的全面评估。最后讨论了温升、振动、EMC等特殊测试方法,为BLDC电机的设计验证和质量控制提供了完整的技术路径。

技术工作者 442

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

m0_71589036的博客 251

二叉排序树模板

二叉排序树模板二叉排序树的判定void Is_BSTree(PBiTNode bt)    //左子树回溯后,下一步一定是进入右子树{    if(bt!=NULL)    {        if(flag&amp;&amp;bt-&gt;LChild)        {              if(bt-&gt;LChild-&gt;Data&gt;=bt-&gt;Data)        ...

碳酸钙的01妖精的博客 285

手把手教你学simulink(28.2)--四旋翼无人机景示例:基于自抗扰控制(ADRC)的无人机姿态稳定系统

通过上述代码实现,您可以逐步创建和搭建一个基于自抗扰控制的无人机姿态稳定系统。该系统能够实时估计和补偿外部扰动及模型不确定性,确保无人机姿态稳定。自抗扰控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。无人机动力学建模:建立无人机的六自由度(6-DOF)动力学模型,包括位置、速度、姿态角和角速度。自抗扰控制器设计。

MHD0815的博客 499

二叉排序树 及模板题

我又回来写博客的原因很简单,我现在只用一个U盘,为了防丢一直都是放在笔袋里,要用U盘就拿走笔袋,而我懒得拿笔袋了。

flyhigh521949的博客 392

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

树的简介及二叉排序树C++模板实现

阅读目录0. 数据结构图文解析系列1. 树的简介1.1 树的特征1.2 树的相关概念2. 二叉树简介2.1 二叉树的定义2.2 斜树、满二叉树、完全二叉树、二叉查找树2.3 二叉树的性质3. 二叉查找树3.1 节点结构3.2 二叉查找树的抽象数据结构3.3 插入新节点3.2 遍历平衡二叉树3.2 前驱与后继3.3 删除节点3.4 查找元素3.5 查找最值元素3.6 销毁二叉树3.7测试代码4. 二...

qq_33336682的博客 782

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

二叉排序树的C++语言描述实现模板

数据结构中二叉排序树的C++语言描述实现模板,有详细的步骤解析及使用示例。

夜悊的博客 898

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

树的简介及二叉排序树C++模板实现.

树的简介及二叉排序树C++模板实现.1. 树的简介1.1 树的特征1.2 树的相关概念2. 二叉树简介2.1 二叉树的定义2.2 斜树、满二叉树、完全二叉树、二叉查找树2.3 二叉树的性质3. 二叉查找树3.1 节点结构3.2 二叉查找树的抽象数据结构 1. 树的简介 1.1 树的特征 树是一种数据结构,它是n(n>=0)个节点的有限集。n=0时称为空树。n>0时,有限集的元素构成一个具有层次感的数据结构 区别于线性表一对一的元素关系,树中的节点是一对多的关系。树具有以下特点: n>0

turnura的博客 679

二叉树链式描述和二叉排序树实现(C++类模板)

@TOC二叉树链式描述和二叉排序树实现 二叉树 二叉树链式描述 二叉排序树 二叉树链式描述和二叉排序树实现

qq_43290168的博客 888

nyoj-1278-Prototypes analyze(二叉排序树模板)

题目链接 思路:建树之后,判断有多少种不同的树。 判断不同的树,简单的思路是遍历数组,判断数组后面是否存在一样的树 1 /* 2 Name:NYOJ-1278-Prototypes analyze 3 Copyright: 4 Author: 5 Date: 2018/4/14 19:19:03 6 Descrip...

weixin_30919235的博客 213

C++模板二叉排序树

什么是二叉查找树: 根节点的值大于其左子树中任意一个节点的值,小于其右节点中任意一节点的值,这一规则适用于二叉查找树中的每一个节点。以下是实现过程,不知是否有bug,刚写完就给上传到了知乎。 以下是代码,看了很多人的总是感觉不是我想要的感觉于是自己写一个。 如有错误请指正 #pragma once #include"预编译.h" using namespace std; template<typename T> struct TreeNode { T val; TreeNode* le

qq_43621555的博客 192

nyoj 1278G: Prototypes analyze 与 二叉排序树(BST)模板

参考博客:https://blog.youkuaiyun.com/stpeace/article/details/9067029 参考博客:https://blog.youkuaiyun.com/baidu_35643793/article/details/70792326 先放上二叉搜索树的板子 #include <iostream> using namespace std; // BST的结点 typ...

weixin_30322405的博客 140
上一篇: 【模板】比较大小之重载运算符和重写cmp (大整数排序、Excel排序、开门人和关门人题解)
下一篇: 【模板】有序表的查找 (折半查找、循环数组最小元素查找)
coderwait
博客等级 码龄9年 20粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值