二叉搜索树 平衡树(c嘎嘎版)

定义:

二叉搜索树是一种二叉树的树形数据结构,其定义如下:

  1. 空树是二叉搜索树。

  2. 若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。

  3. 若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值。

  4. 二叉搜索树的左右子树均为二叉搜索树。

二叉搜索树上的基本操作所花费的时间与这棵树的高度成正比。对于一个有 N个结点的二叉搜索树中,这些操作的最优时间复杂度为O(logn) ,最坏为O(n) 。随机构造这样一棵二叉搜索树的期望高度为O(logn)  

二叉搜索树节点的定义:

struct TreeNode{
	int key;
	TreeNode*left;
	TreeNode*right;
	//维护其他信息,如高度,节点数量。
	int size;//当前节点为根的子树大小
	int count;// 当前节点的重复数量
	TreeNode(int value)
      : key(value), size(1), count(1), left(nullptr), right(nullptr) {} 
};

  

遍历二叉搜索树

由二叉搜索树的递归定义可得,二叉搜索树的中序遍历权值的序列为非降的序列。时间复杂度为O(n)

void inOrderTraversal(TreeNode * root) 
{
    // 1. 如果当前节点为空,直接返回
    if (root == nullptr) {
        return;
    }

    // 2. 递归遍历左子树
    inOrderTraversal(root->left);

    // 3. 访问当前节点
    cout << root->key << ' ';

    // 4. 递归遍历右子树
    inOrderTraversal(root->right);    
}

查找最小/最大值

由二叉搜索树的性质可得,二叉搜索树上的最小值为二叉搜索树左链的顶点,最大值为二叉搜索树右链的顶点。时间复杂度为O(h)

int findMin(TreeNode * root)
{
	if(root == nullptr) return -1;
	while(root ->left != nullptr) root = root ->left;
	
	return root ->key;
}
int findMax(TreeNode* root) {
  if (root == nullptr) {
    return -1;
  }
  while (root->right !&

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

旅游系统旅游小程序PHP+Uniapp

旅游门票预订系统&#xff0c;支持景点门票、导游产品便捷预订、美食打卡、景点分享、旅游笔记分享等综合系统 更新日志 V1.3.0 1、修复富文本标签 2、新增景点入驻【高级版本】3、新增门票核销【高级版】4、新增门票端口【高级版】

使用winscp从windows访问Ubuntu进行文件传输

Ubuntu 系统上的准备工作 • 安装 SSH 服务器&#xff1a; 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server • 启动 SSH 服务&#xff1a; 确保 SSH 服务正在运行&a…

Day10 苍穹外卖项目 订单搜索、各个状态的订单统计、查询订单详细、接单、拒单、取消订单、派送订单、完成订单

目录 1.订单搜索 1.1 需求分析和设计 1.2 接口设计 1.2 代码实现 1.2.1 admin/OrderController 1.2.2 OrderService 1.2.3 OrderServiceImpl 2.各个状态的订单数量统计 2.1 需求分析和设计 2.2 接口设计 2.3 代码实现 2.3.1 admin/OrderController 2.3.2 OrderService 2.3.3 Or…

智慧商城:登录页静态布局,axios请求数据切换图形验证

登录页静态布局 在src目录下新建 styles&#xff0c;主要用于 存放公共样式。在该文件夹下新建common.less文件&#xff0c;并将其在main.js中引入 将图片拷贝到src文件夹下的 assets文件夹下 完成静态布局 点击左箭头能返回到首页 所有组件头部返回左箭头颜色都是一样的&#…

uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!

**提要&#xff1a;**近段时间我们收到多个康复机构用户&#xff0c;咨询AI运动识别插件是否可以应用于肢力运动受限患者的康复锻炼中来&#xff0c;插件是可以应用到AI康复锻炼中的&#xff0c;今天小编就为您介绍一下AI运动识别插件在康腹锻炼中的应用场景。 一、康复机构的应…

怎样设计校园物联网智慧用电平台?

安科瑞戴婷 Acrel-Fanny 相关背景 安全用电历来都是学校安全工作的一个重点&#xff0c;然而每年因此发生的人身伤害以及火灾事故却在继续着&#xff0c;究其原因&#xff0c;主观上是我们的防患意识淡薄&#xff0c;客观上则是由于学生在宿舍使用违规电器、乱拉电线造成的。…

STM32F405 + CubeMX - 产生互补PWM波,中心对齐模式1 + PWM模式2(FOC算法专用)

导言 在FOC算法里&#xff0c;SVPWM用于产生三相PWM波给电机。为了生成SVPWM波形&#xff0c;STM32的高级定时器TIM使用互补PWM的中心对齐模式1可以很好地实现。 如上图所示&#xff0c;按照后面的笔记来配置TIM1后&#xff0c;可以产生的互补PWM波形。 我们期望的SVPWM&…

【Excel】单元格分列

目录 分列&#xff08;新手友好&#xff09; 1. 选中需要分列的单元格后&#xff0c;选择 【数据】选项卡下的【分列】功能。 2. 按照分列向导提示选择适合的分列方式。 3. 分好就是这个样子 智能分列&#xff08;进阶&#xff09; 高级分列 Tips&#xff1a; 新手推荐基…

助力 Tuanjie OpenHarmony 开发:如何使用工具包 Hilog 和 SDK Kits Package?

随着团结引擎从 1.0.0 迭代至 1.3.0&#xff0c;越来越多的开发者开始使用团结引擎开发 OpenHarmony 应用。 在开发的过程中&#xff0c;我们也收到了大量反馈&#xff0c;尤其是在日志、堆栈和性能数据方面&#xff0c;这些信息对开发和调试过程至关重要。同时&#xff0c;我…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>找出所有子集的异或总和再求和

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; private int ret;//返回周结果private int path;//枚举一个元素就异或进去public int subsetXORSum(int[] nums) {dfs(nums, 0);return ret;} private void dfs(int[] nums, int pos){ret path;for(int i pos; i <…

详解排序几大算法

一、插入排序 基本思想&#xff1a; 直接插入排序是一种简单的插入排序算法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列。 步骤&#x…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

作者&#xff1a;杨兰馨&#xff08;楠瑆&#xff09; 背景 2024 年 10 月 22 日&#xff0c;华为正式发布了原生鸿蒙操作系统&#xff08;HarmonyOS NEXT&#xff09;。原生鸿蒙实现了系统底座全部自研&#xff0c;系统的流畅度、性能、安全特性等方面显著提升&#xff0c;也…

嵌入式驱动开发详解17(CAN驱动开发)

文章目录 前言CAN简介CAN收发器CAN协议讲解电气特性传输协议数据帧遥控帧错误帧过载帧帧间隔 同步矫正 CAN控制器CAN控制器模式CAN接收器CAN波特率 CAN设备树分析CAN测试后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发&#xff0c;但是由于部分模块的驱动框架过于复…

计算机游戏运行时常见问题解析:d3dx9_43.dll丢失的真相与修复指南

游戏运行时d3dx9_43.dll缺失问题全解析 在计算机游戏的探险之旅中&#xff0c;d3dx9_43.dll文件缺失常成为玩家的绊脚石。此DLL文件是DirectX 9的关键组件&#xff0c;对图形渲染至关重要。以下&#xff0c;我们将深入剖析其丢失原因&#xff0c;并提供精简有效的修复策略。 …

CSS(13):2D

一.2D转换之移动translate 2D移动是2D转换里面的一种功能&#xff0c;可以改变元素在页面中的位置&#xff0c;类似定位。 transform:translate(x,y);&#xff08;里面可以用到参数%&#xff0c;是相对于自身宽度和高度来计算的&#xff09; transform:translateX(n); tran…

AI 赋能:医学科研审稿邀请的优化之道

在医学科研这座宏伟的知识殿堂中&#xff0c;审稿邀请是保障学术成果质量的关键环节&#xff0c;审稿邀请犹如一扇关键之门&#xff0c;连接着科研成果与专业评审&#xff0c;决定着学术智慧的传承与升华。如今&#xff0c;AI 技术恰似一把神奇的钥匙&#xff0c;悄然插入这扇门…

如何搭建Hexo博客,并发布到github上

1、安装好git 2、安装好npm、node 3、切换npm的源&#xff0c;现在阿里的cnpm不行了&#xff0c;要切换成新的&#xff1a; npm config set registry https://registry.npmmirror.com npm config get registry4、安装hexo-cli npm install -g hexo-cli查看是否安装成功&#…

React,Antd实现文本输入框话题添加及删除的完整功能解决方案

最终效果就是实现该输入框: 添加话题时,话题自动插入到输入框前面多文本输入框左侧间距为话题的宽度多行文本时,第二行紧接开头渲染删除文本时,如果删除到话题,再次删除,话题被删除首先构造div结构const [hashtag, setHashtag] = useState(""); // 话题内容con…

Apache服务器配置:从小白到高手的飞跃

本节目录&#xff1a; Web服务器概述 Apache服务器及安装 配置 作业 Web服务:互联网的心脏 想象一下&#xff0c;如果没有Web服务器&#xff0c;我们就不能浏览网页&#xff0c;不能在线购物&#xff0c;不能看视频&#xff0c;不能做很多事情。Web服务器就是互联网的心脏&…

基于SpringBoot的滑雪场管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…