查找算法【二叉查找树】 - 二叉查找树的插入

news2024/11/17 7:28:38

查找算法【二叉查找树】 - 二叉查找树的插入

因为二叉查找树的中序遍历存在有序性,所以首先要查找待插入关键字的插入位置,当查找不成功时,再将待插入关键字作为新的叶子节点成为最后一个查找节点的左孩子或右孩子。

【算法步骤】

① 若二叉查找树为空,则创建一个新的节点s ,将待插入关键字放入新节点的数据域,将s 节点作为根节点,左右子树均为空。

② 若二叉查找树非空,则将待查找关键字x 与根节点的关键字T->data进行比较。

  • 若x <T ->data,则将x 插入左子树中。
  • 若x >T ->data,则将x 插入右子树中。

【举个栗子】

一棵二叉查找树如下图所示,向其中插入关键字30。

在这里插入图片描述

① 将30与树根25进行比较,30>25,在25的右子树中查找,如下图所示。

在这里插入图片描述

② 将30与右子树的树根69进行比较,30<69,在69的左子树中查找,如下图所示。

在这里插入图片描述

③ 将30与左子树的树根32进行比较,30<32,在32的左子树中查找,如下图所示。

在这里插入图片描述

④ 32的左子树为空,将30作为新的叶子节点插入32的左子树中,如下图所示。

在这里插入图片描述

【算法实现】

void InsertBST(BSTree &T , ElemType e){ //二叉查找树的插入
	//当二叉排序树T 中不存在关键字等于e 的数据元素时,插入该元素
	if(!T){
		BSTree S = new BSTNode;  //生成新节点
		S-> data = e; //将新节点S的数据域置为e
		S-> lchild = S -> rchild = NULL; //将新节点S作为叶子节点
		T = S; //将新节点S 链接到已找到的插入位置
	}
	else if(e < T-> data){
		InsertBST(T->lchild , e); //插入左子树
	}
	else if(e > T->data){
		InsertBST(T->rchild , e); //插入右子树
	}
}

【算法分析】

在二叉查找树中进行插入操作时需要先查找插入位置,插入本身只需要常数时间,但查找插入位置的时间复杂度为O (logn )。

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

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

相关文章

vim编辑器使用和vim一键配置

1.vim的三种模式 开始之前&#xff0c;先简单说&#xff0c;vim并不是只有这三种模式。总的来说vim大概有12种模式&#xff0c;不同的版本可能也有一些具体的区别。今天我们先介绍三种常用的模式。 先用一张图来大概介绍三种模式之间的转换 命令模式&#xff08;Normal mod…

强化学习算法实践(一)——策略梯度算法

文章目录Reference1. REINFORCE1.1 Basic1.2 Code2. Improvement Tips2.1 Assign Suitable Credit2.2 Add a Baseline2.3 Advantage Function3. Actor-Critic(A2C)3.1 Basic3.2 Code策略梯度是一种基于策略的算法&#xff0c;相比于DQN一类的基于价值的算法&#xff0c;它会直接…

C语言分支与循环--循环篇(图片,动画演示),彻底搞定C语言循环

前言 &#x1f47b;作者&#xff1a;龟龟不断向前 &#x1f47b;简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; 刷题&#xff1a; 牛客网 leetcode笔记软…

jupyter怎么换环境?

1.为什么要换环境而不用使用默认环境&#xff1f; 在这之前我只知道&#xff0c;要pip安装很多环境包&#xff0c;来在程序中调用使用&#xff0c;但是在不同的项目中&#xff0c;环境总是相互矛盾&#xff0c;总会出现诸多版本问题。所以需要每个项目对应一个环境。conda默认…

2022第二届中国高校大数据竞赛A题(实时更新)

题目 制造业是国民经济的主体&#xff0c;近十年来&#xff0c;嫦娥探月、祝融探火、北斗组网&#xff0c;一大批重大标志性创新成果引领中国制造业不断攀上新高度。作为制造业的核心&#xff0c;机械设备在工业生产的各个环节都扮演着不可或缺的重要角色。但是&#xff0c;在…

【FTP工具】FileZila安装以及使用详解

一、FTP概念 安装FTP主要是为了传输文件&#xff0c;FTP是持久的&#xff0c;只有一次认证过程&#xff0c;传输多个文件都是使用同一个连接。因为FTP就是为远程文件交互而设计的&#xff0c;有些时候只是为了单纯做一个文件传输&#xff0c;往往搭建FTP服务更省时和节约成本。…

【每日刷题】之【Z字形变换】

✨✨hello&#xff0c;愿意点进来的小伙伴们&#xff0c;你们好呐&#xff01; &#x1f43b;&#x1f43b;系列专栏&#xff1a;【力扣刷题篇】 &#x1f432;&#x1f432;本篇内容&#xff1a; 每日刷题 &#x1f42f;&#x1f42f;作者简介:一名现大二的三非编程小白&#…

BI设计上篇 - 像设计师一样思考

形式服从功能。这句产品设计的箴言也适用于数据可视化。就数据可视化的形式和功能而言&#xff0c;我们首先考虑的是我们希望受众能用数据做什么&#xff08;功能&#xff09;&#xff0c;然后才是用可视化&#xff08;形式&#xff09;来简化这个过程。在本文中&#xff0c;我…

总结flutter玩转之-安卓view 承载flutter 的页面

1.假设你已经熟悉flutter 开发熟悉dart 语言 android 原生开发技能 一、在安卓原生项目添加代码 1.创建示例布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"…

【Linux修炼】6.gcc/g++及Makefile【工具篇】

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 Linux-gcc/g及Makefile本节目标程序的翻译过程1.程序的翻译过程2. 理解选项的含义3. 动态链接和静态链接Linux项目自动化构建工具-make/Makefile1. 背景2. “见见猪跑”3. makefile原理及语法3.1 Makefile原理3.2 Makefile…

pytorch初学笔记(二):TensorBoard之add_scale()的使用

目录 一、SummaryWriter类的介绍 1. 定义 2. SummaryWriter初始化 2.1 初始化 2.2 帮助文档给出的使用范例 2.3 常用方法 二、add_scale()方法介绍 1. 常用参数介绍 2. 绘制图形 2.1 安装tensorboard 2.2 对应代码 2.3 打开tensorboard窗口 2.3 注意事项 三、a…

kubernetes学习笔记

参考 Cloudman 老师的《每天5分钟玩转Kubernetes》&#xff0c;记录如何使用 Kubernetes &#xff0c;由于版本变化&#xff0c;一些命令也有相应的变化&#xff0c;本文对应 Kubernetes 1.25.3 5. 运行应用 010.123 用 Deployment 运行应用 原文使用kubectl run命令&#x…

JS(Dom对象的属性和方法)第十六课

Dom对象的属性和方法自定义的熟悉操作上面是今天博客要讲述的内容 一个案例回顾上次课讲的内容 下面是Html中的元素布局结构 <div>我是div审查元素<p>我是p标记的元素</p><span>我是span的元素信息</span></div><div class"one&…

搭建ftp服务器注意事项

很早之前写过一篇关于FTP服务器相关博客&#xff1a;FTP服务器主动被动模式详解。直到最近生产环境需要搭建一个FTP服务&#xff0c;才发现一些细节还需注意。 生产环境搭建ftp服务器&#xff0c;如果有外部用户需要连接ftp服务器下载文件&#xff0c;一般用的是Passive (PASV&…

[深度学习] 名词解释--正则化

正则化 花书的定义&#xff1a;凡是可以减少泛化误差&#xff08;过拟合&#xff09;而不是减少训练误差的方法&#xff0c;都叫正则化方法。 目的&#xff1a;拟合训练数据&#xff0c;防止模型过拟合&#xff0c;通常使用L2正则化.用各种方法规范模型参数的方法. 什么是神经网…

408 | 【2012年】计算机统考真题 自用回顾知识点整理

选择题 T2&#xff1a;后缀表达式&#xff08;逆波兰表达式&#xff09;—— 注意 操作数的顺序&#xff01; 中缀转后缀 运算顺序不唯一&#xff0c;因此对应的后缀表达式也不唯一“左优先”原则&#xff1a;只要左边的运算符能先计算&#xff0c;就优先算左边的用栈实现中缀…

JS(DOM)第十五课

Dom的全称是Document Object Model DOM 定义了访问 HTML 和 XML 文档的标准 Dom的定义 DOM 文档对象模型 DOM是针对XML的基于树的API。描述了处理网页内容的方法和接口&#xff0c;是HTML和XML的API&#xff0c;DOM把整个页面规划成由节点层级构成的文档。 DOM本身是与语言无…

基于simulink的超级电容,电池及DC motor充放电系统仿真

目录 一、理论基础 二、核心程序 三、测试结果 作者ID &#xff1a;fpga和matlab CSDN主页&#xff1a;https://blog.csdn.net/ccsss22?typeblog 擅长技术&#xff1a; 1.无线基带,无线图传,编解码 2.机器视觉,图像处理,三维重建 3.人工智能,深度学习 4.智能控制,智能优…

【C ++基础】迭代器(iterator)在string里面的简单使用

【C 基础】迭代器(iterator)在string里面的简单使用 前言 本文是为了扫清后面学习的难点&#xff0c;而特意写的文章&#xff0c;只是介绍迭代器如何在string中使用。 迭代器的详细解释请看这里&#xff1a; [点击跳转&#xff08;这里还没有写哦&#xff09;] C专栏主页&am…

【Node.JS】事件的绑定与触发

往期文章 【Node.JS】写入文件内容 【Node.JS】读取文件内容 目录 简介 绑定事件 on&#xff08;&#xff09; addListener&#xff08;&#xff09; once&#xff08;&#xff09; 监听事件emit&#xff08;&#xff09; 传参 删除事件 removeListener&#xff08;&am…