二叉查找树的基本操作

二叉查找树(BST):概念、基本操作和性能分析 文章目录定义声明基本操作初始化 MakeEmpty查找任意值 Find查找最小/最大值 FindMin/FindMax插入 Insert删除 Delete性能分析参考资料 二叉查找树 (Binary Search Tree, BST) 是二叉树在查找中的一种重要应用形式。 在这篇文章接下来的叙述中,做出以下假设: 尽管二叉树节点中存储的数据类型是任意的,但为了大小比较和理解的方便,本文中将数据类型指定为整数。 各个节点中的存储的数据是没有重复的。 定义 若一棵二叉树为二叉查找树,那么它必须满足: 对于 阅读详情

1、查找 

void search(Node* root,int x)
{
	if(root==NULL) 
	{
		printf("search failed\n");
		return;
	}
	if(x==root->data)
	{
		printf("%d\n",root->data);
	}
	else if(x<root->data)
	{
		search(root->lchild,x);
	}
	else
	{
		search(root->rchild,x);
	}	
}

2、插入

void insert(Node* &root,int x) 
{
	if(root==NULL)
	{
		root=newNode(x);
		return;
	}
	if(x==root->data)
	{
		return;
	}
	else if(x<root->data)
	{
		insert(root->lchild,x);
	}
	else
	{
		insert(root->rchild,x);
	}	
}

3、创建

Node* create(int data[],int n) 
{
	Node* root=NULL;
	for(int i=0;i<n;i++)
	{
		insert(root,data[i]);
	}
	return root;
}

4、寻找以root为根的树中,最大权值的结点

Node* findMax(Node* root) 
{
	while(root->rchild!=NULL)
	{
		root=root->rchild;
	}
	return root;
}

5、寻找以root为根的树中,最小权值的结点

Node* findMin(Node* root) 
{
	while(root->lchild!=NULL)
	{
		root=root->lchild;
	}
	return root;
}

6、 删除以root为根结点的树中,权值为x的结点

void deleteNode(Node* &root,int x) 
{
	if(root==NULL) return;
	if(root->data==x)
	{
		if(root->lchild==NULL&&root->rchild==NULL)
		{
			root=NULL;  //将root指针置为空,这样,其父节点对应的孩子指针域便置为空了 
		}
		else if(root->lchild!=NULL)
		{
			Node* pre=findMax(root->lchild); //root前驱 
			root->data=pre->data;
			deleteNode(root->lchild,pre->data);
		}
		else
		{
			Node* next=findMin(root->rchild);
			root->data=next->data;
			deleteNode(root->rchild,next->data);
		}
	}
	else if(root->data>x)
	{
		deleteNode(root->lchild,x);
	}
	else
	{
		deleteNode(root->rchild,x);
	}
}

 

二叉查找树的查找、删除、插入等基本操作(C语言) 该源码使用C实现了最二叉查找树的基本操作,比如删除、查找,插入等。 立即下载

相关推荐

基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)

    一直拖了这么久没有更新,怪我太懒啦~~~ 今天要特别感谢舒仔仔同学,我的好队友帮我写了这篇博文。这篇文章主要讲了如何通过mavros来控制pixhawk。硬件逻辑是这样子,我们先搞一个odroid(土豪上TX2),再用usb线将odroid与pixhawk连接。所以,odroid发送控制指令来控制pixhawk飞行。pixhawk与外界的通信协议是mavlink。ROS下面有个包叫mavr...

zhengyuxin0507的博客 1万+

二叉树的构建

二叉树是一种非常重要的数据结构。本文总结了二叉树的常见操作:二叉树的构建,查找,删除,二叉树的遍历(包括前序遍历、中序遍历、后序遍历、层次遍历),二叉搜索树的构造等。

li123128的博客 3648

MCU 微控制器,在实际项目中如何选型(以 STM32为例)

1.MCU 选型需要考虑的一些因素 2.案例:传感器设备的 MCU 选型

创享 AIOT 的专栏 1万+

数据结构,二叉搜索树的详解

本期讲解:二叉搜索树是怎样形成的,怎样查找二叉搜索树的结点,插入结点以及删除结点。

我的主页 1122

SAP ABAP实战:手把手教你用BAPI_BILLINGDOC_CREATEMULTIPLE批量开票(附完整代码与避坑指南)

本文详细解析了SAP ABAP中BAPI_BILLINGDOC_CREATEMULTIPLE批量开票的全流程,包括参数配置、事务控制、错误处理及性能优化。通过实战案例和完整代码示例,帮助开发者高效处理大批量发票生成任务,避免常见陷阱,提升开发效率。

weixin_34101914的博客 267

音频质量评估指标全解析:从主观到客观的全面指南

本文全面解析了音频质量评估的核心指标,涵盖主观评价(如MOS、DMOS)与客观评价(如PESQ、STOI、SDR)。重点介绍了DNSMOS等AI驱动的无参考评估方法,并提供了根据语音通信、噪声抑制、语音分离等不同场景选择指标组合的实战指南,帮助开发者和研究者科学量化音频质量。

rum55的博客 645

C语言 二叉搜索树(建立、插入、查找和删除等基本操作)

以上是关于二叉搜索树的一些基础知识和操作流程。二叉搜索树是一种常用的数据结构,在实际开发中应用广泛。它可以快速地实现数据的查找、插入和删除等操作,并且具有遍历操作,可以对 BST 中的数据进行排序。在工程实践中,二叉搜索树可以用于实现字典、关键字索引和数据压缩等场景。当然,BST 也有一些缺点,主要是在遇到极端情况时,比如树的深度很大,会出现退化,在某些操作上的时间复杂度会退化成 O(n),不再具有快速的操作效率。为了解决这个问题,需要进行 AVL 树或红黑树等平衡二叉搜索树的优化。

m0_73070900的博客 4139

Android 13 GMS认证避坑:手把手教你搞定RKP配置,解决GTS测试fail

本文详细解析Android 13 GMS认证中的RKP(远程密钥配置)全流程,提供GTS测试失败的深度解决方案。从RKP核心概念到实战配置技巧,帮助开发者规避常见陷阱,确保设备顺利通过Google安全认证,特别适合需要快速掌握Android13 GMS认证的工程师参考。

weixin_29796279的博客 464

二叉查找树的基本操作(c语言)

其次插入还必须满足二叉查找树的性质**左子树小于根节点,根节点小于右子树。**于是我们从根节点开始找,**如果插入元素小于根节点,则从左边插入,如果插入元素大于根节点,则从右边插入。,但是即使这样也要保证二叉查找树的基本性质**左子树小于根节点,根节点小于右子树。**这样我们分三种情况讨论。,若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值。,若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值。结点的值,只是让值相等,不改变树形的结构(与情况2完全相等的操作区别)

wuqingshun314159的博客 1600

SAP-HR 模块 PPOSE 的详细信息标签页增强

步骤1:T-CODE : SE11 创建一个名为 HRI9106 的结构 命名:HRI + 91 + 两位数字。人事管理 - 组织管理 - 集成新信息类型 - 将信息类型添加为明细范围中的标签页。步骤6:SE51 查看 7000屏幕,修改屏幕属性 让其更美观。步骤3:T-CODE : SM30维护 T777I 表。步骤5:PPCI 新建 7000屏幕用于显示。标签页 IT 开头 + 信息类型 9106。步骤2:T-CODE : PPCI。步骤4:T-CODE : SPRO。

常回来看看呀!! 1628

DirectX function “GetDeviceRemovedReason“ failed with DXGI_ERROR_DEVICE_HUNG (“The GPU will not resp

游戏报错"DXGI_ERROR_DEVICE_HUNG"的解决方案 在使用RTX 40系显卡运行FIFA 23等游戏时,可能出现DirectX报错导致游戏崩溃。这主要由于最新显卡驱动与DirectX 12的兼容性问题。解决方法包括: 降级显卡驱动版本 修改游戏配置文件,将DIRECTX_SELECT设为1 在显卡控制面板中关闭垂直同步、抗锯齿、DLSS 3等功能 调整电源模式为性能优先 这些操作可以有效解决因驱动兼容性导致的游戏崩溃问题。

猿小白的博客 3893

二叉搜索树详解

但对于有n个节点的二叉搜索树,若每个元素的概率相等,则二叉搜索树的平均查找长度是节点在二叉搜索树的深度的函数,节点越深,比较次数就越多。所有在“大佬“的改进下,我们有引入的平衡二叉树和红黑树的概念,使得二叉树的性能有了较大的提升,下一篇内容将会给大家介绍平衡二叉数。2、统计单词的次数,给定一个单词的拼写,就可以快速找到其出现的次数单词由其出现次数就是的一种键值对。情况d、在它的右子树中寻找中序下的第一个节点,用它 的值填补到被删除节点中,再去处理该节点的删除问题----替换删除。

2302_79215415的博客 2704

虚幻商城 Fab 免费资产自动化入库

Fab 商城的所有的免费资产自动化入库

一碗清深的博客 3647

二叉查找树的基本操作C++实现

最近在看胡凡的《算法笔记》,将其中的内容理解了一下,然后进行实现 #include<iostream> using namespace std; class node { public: node*lchild; node*rchild; int data; node(int data):data(data){} }; //二叉查找树的查找 void ...

weixin_44022275的博客 169

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

算法笔记-二叉查找树基本操作

二叉查找树(BST) 二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树,又称为排序二叉树、二叉搜索树、二叉排序树。二叉查找树的递归定义如下: 要么二叉查找树是一棵空树 要么二叉查找树由根结点、左子树、右子树组成,其中左子树和右子树都是二叉查找树,且左子树上所有结点的数据域均小于或等于根结点的数据域,右子树所有结点的数据域均大于根结点的数据域。 二叉查找树实际上是一棵数...

qq_43055456的博客 515

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构专题——二叉查找树的基本操作

什么是二叉查找树 二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树,又称二叉搜索树,二叉排列树 他的递归定义是 要么二叉查找树是一颗空树 要么二叉查找树是由根结点、左子树、右子树构成,其中左子树和右子树都是二叉查找树,且左子树上所有结点的数据均小于或等于根结点,右子树上的所有结点的数据均大于根结点 ,如下图所示 二叉查找树的基本操作 二叉查找树的操作算法是由一般查找树改造而来的。 查找操作 /** * 查找 * @param root * @

layAlex的博客 314

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C语言算法二叉查找树基本操作

二叉查找树:左子<根结点<右子的二叉树 基本实现有插入,删除,中序遍历,寻找结点,用这些可以写出其他的功能,比如寻找到最大的结点然后删除,在二叉查找树中替换部分子树等。 直接看代码: #include<stdlib.h> #include<stdio.h> #include<malloc.h> #include<string.h> //二叉查找(搜索)树定义:左子节点<右子节点<根节点 //创建方式和普通二叉树相同 //创建结构 t

qq_51553982的博客 2257

二叉树的性质以及二叉查找树的基本操作

1、基本概念 树(Tree)是n(n≥0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个特定的被称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。 度:结点拥有的子树数称为结点的度(Degree)。度为0的结点称为叶子(Leaf)或终端结点。度不为0的结点称

jayxu无捷之径的博客 1776

二叉排序树/二叉查找树及其基本操作

一、二叉排序树 二叉排序树,又称二叉查找树(BST(Binary Sort/Search Tree) )或者是一棵空树,或者是具有下列特性的二叉树: (1)若左子树非空,则左子树上所有结点的值均小于根结点的值。 (2)若右子树非空,则右子树删所有结点的值均大于根结点的值。 (3)左右子树分别为一棵二叉排序树。 根据二叉排序树的定义,左子树结点值<根结点值<右子树结点值,则对二叉排序树进行中序遍历,可以得到一个递增的有序序列。如果有相同的值,可以将该节点放在左子节点或右子节点。 E.g:下图所示的

qq_44111805的博客 5807

[C语言实现]实现二叉查找树基本操作(递归版,图示)

定义 二叉查找树是一种特殊的二叉树,它不仅是一颗二叉树,还满足如下性质 对于任何非叶子节点,他的左节点都小于它本身,而右节点都大于其本身. 它的左右子树也分别而二叉搜索树 一般情况下,在这么一棵树中进行查找,它的时间复杂度是 longnlongnlongn 但是在最坏情况下,一棵树会退化成单链表,那么此时的查找时间复杂度就是 nnn 实现 头文件 #pragma...

wck0617 3658

二叉查找树的定义以及几个基本操作

二叉查找树是一种特殊的二叉树,一般数据域都是数值类型的元素,原因是二叉查找树基本性质决定了,在二叉查找树中的任意结点,其数据域的数值一定大于它的左子树的所有结点,也小于它的右子树的所有结点!!!所以,是可以比较的数据域才是二叉查找树的存在意义! 这里我写了几个二叉查找树的方法,前几个比较简单,唯一有点难度的是删除结点的操作! 如果待删除的结点是叶子结点,非常好办,删之即可!

Ben的专栏 2152

【二叉查找树BST】二叉查找树的基本操作总结

二叉树就是一棵顺序树,优化查找效率。一组相同的数据所构造出来的二叉查找树不同。 二叉查找树的查找:(一个函数) struct Node{ int data; Node* lchild,rchild; }; //查找 void search(Node* root,int x){ //指向树的指针,要查找的树 if(root==NULL) return; //查找失败,递归边界 ...

为了远大的理想,冲锋! 270

[C语言实现]实现二叉查找树基本操作(迭代版)

实现二叉查找树基本操作 在这篇博客我们已经记录了二叉查找树插入查找删除的思路,使用递归很容易实现,因为树的定义都是递归实现的,所以相对于递归,使用迭代完成上述操作就比较复杂了. 插入的实现 需要手动记录该节点的父节点,因为要将父节点的子树指向新节点 插入的节点是该父节点的左子树还是右子树,通过比较大小就可以确定 void SearchTreeInsert_ByLooP(Searc...

wck0617 847

二叉查找树的基本操作(建立,插入,删除,遍历)

#include <stdio.h> #include <stdlib.h> struct TreeNode; typedef struct TreeNode *Position; typedef struct TreeNode *SearchTree; typedef int ElementType; struct TreeNode { ElementType Element; S

tengyuan93的博客 689

二叉查找树基本操作

#include <cstdio> using namespace std; struct node { int data; node* lchild; node* rchild; }; //查找操作 void search(node *root,int x) { if(root==NULL) { printf("Failed"); return; } if(x==root->data) {

qq_48081509的博客 154
上一篇: pat a1053 给定权值和,求路径
下一篇: pat a1043 二叉排序树 镜像树
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值