【c++leetcode】1382. Balance a Binary Search Tree

问题入口

DSW (DAY, STOUT & WARREN) ALGORITHM

时间复杂度O(n)

class Solution {
public:int makeVine(TreeNode* grand, int cnt = 0){auto n = grand->right;while (n != nullptr){if(n->left != nullptr){auto old_n = n;n = n->left;old_n->left = n->right;n->right = old_n;grand->right = n;}else{cnt++;grand = n;n = n->right;}}return cnt;}void compress(TreeNode *grand, int m) {auto n = grand->right;while (m-- > 0){auto old_n = n;n = n->right;grand->right = n;old_n->right = n->left;n->left = old_n;grand = n;n = n->right;}}TreeNode* balanceBST(TreeNode *root) {TreeNode grand;grand.right = root;auto cnt = makeVine(&grand);int m = pow(2, int(log2(cnt + 1))) - 1;compress(&grand, cnt - m);for (m = m / 2; m > 0; m /= 2)compress(&grand, m);return grand.right;}
};

 

1. 将最初的树转变为藤蔓。 通过进行右旋转,我们将树展平为“链表”,其中头是以前最左边的节点,尾部是以前最右边的节点。

2. 将树转换为藤蔓后,计算 节点总数(cnt)。

 

3. 计算最接近的完美平衡树的高度:h = log2(cnt + 1)。

4. 计算最接近的完美平衡树中的节点数:m = pow(2, h) - 1。

5. 向左旋转 cnt - m 个节点以掩盖多余的节点。

6. 左旋转 m/2 个节点。

7. 将 m 除以 2,并在 m / 2 大于零时重复上述步骤。

 

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

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

相关文章

力扣hot100题解(python版18-21题)

18、矩阵置零 给定一个 *m* x *n* 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法**。** 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例…

Stable Diffusion WebUI 折腾新篇章

原文:https://blog.iyatt.com/?p13123 1 前言 第一次玩 Stable Diffusion WebUI 是三十几天前,当时还在用四年半前(大学前暑假)买的轻薄本,而在半年前独显还坏了,所以是纯纯的用 CPU 折腾,刚…

【Android】View事件体系基础

文章目录 坐标系View滑动layout方法offserLeftAndRight() 和 offsetTopAndBottom()LayoutParams(布局参数)View动画scrollTo/scrollBy 解析Activity的构成 坐标系 分为Android坐标系和View坐标系 可以用 getWidth() 和 getHeight() 获取View自身的宽度和高度 对于ViewgetX() …

【c语言】内存函数

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 memcpy函数的使用和模拟实现 memcpy函数的使用 memcpy函数的模拟实现 memmove的使用和模拟实现 memmove的使用 memmove的模拟实现 memset函数的使用 memcmp函数…

pdf转word文档怎么转?分享4种转换方法

pdf转word文档怎么转?在日常工作中,我们经常遇到需要将PDF文件转换为Word文档的情况。无论是为了编辑、修改还是为了重新排版,将PDF转为Word都显得尤为重要。那么,PDF转Word文档怎么转呢?今天,就为大家分享…

Java中web的css、js、img等静态资源引入详细操作教程

本篇文章主要讲解:Java中web的css、js、img等静态资源引入详细操作教程 日期:2024年2月27日 作者:任聪聪 java中web单体项目静态资源webjar引入形式说明 说明:通过webjar进行静态资源的导入,使用maven进行版本的管理。…

基于华为atlas的分类模型实战

分类模型选用基于imagenet训练的MobileNetV3模型,分类类别为1000类。 pytorch模型导出为onnx: 修改mobilenetv3.py中网络结构,模型选用MobileNetV3_Small模型,网络输出节点增加softmax层,将原始的return self.linear4…

postgressql和postgis安装

PostgreSQL安装 1 简 介 2 PostgreSQL优点特性 3 安装PostgreSQL 3.1 Yum安装 3.2 RPM包安装 3.3 源码安装 4 安装PostGIS 4.1 安装依赖 4.2 检查PostGIS是否安装成功 5 PostgreSQL多实例 PostgreSQL安装 1 简 介 PostgreSQL 是一种非常复杂的对象-关系型数…

【经验】vscode 鼠标拖曳不能选中整行文字,只能选中纵向矩形范围

1、问题描述 不知道昨天操作vscode设置界面时,误选择了啥,导致鼠标拖曳不能选中整行文字,只能选中纵向矩形范围,现象如下: 2、解决方法 1)打开设置界面 点击左下角按键,选择“设置” 2&…

kubectl 命令行管理K8S(下)

目录 声明式资源管理方式 介绍 命令 修改yaml文件指定的资源 离线修改 在线修改 YAML 语法格式 查看 api 资源版本标签 编辑yaml配置清单生成资源 编写yaml文件 yaml创建Deployment yaml创建service服务对外提供访问并测试 yaml创建Pod 生成模板 pod模板 serivc…

Linux运维-Web服务器的配置与管理(Apache+tomcat)(没成功,最后有失败经验)

Web服务器的配置与管理(Apachetomcat) 项目场景 公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用、移动APP等领域延伸,此时原来开发web服务的php语言已经不适应新的…

leetcode:134.加油站

解题思路:需要注意开始时的编号,有的可以走一圈,有的走不了 模拟过程:for循环主要是用来模拟线性的过程,而在这里它是环状的; 可以用暴力解法,但是在这里我用贪心来解决。 常见疑惑&#xff1…

云呐智能化运维发展趋势是什么样?5g智能化矿山运维是什么

智能运维是近年来信息技术和自动化技术发展的一个新兴领域。未来,智能运维的技术演变方式可能包括以下几个方面: 数据驱动决策: 随着大数据技术的发展,智能运维将更加重视数据驱动的决策。通过对海量数据的实时分析和挖掘,我们可以发…

在Web UI上提交Flink作业

1)任务打包完成后,我们打开Flink的WEB UI页面,在右侧导航栏点击“Submit New Job”,然后点击按钮“ Add New”,选择要上传运行的JAR包 JAR包上传完成,如下图所示 (2)点击该JAR包&…

人工智能之Tensorflow程序结构

TensorFlow作为分布式机器学习平台,主要架构如下: 网络层:远程过程调用(gRPC)和远程直接数据存取(RDMA)作为网络层,主要负责传递神经网络算法参数。 设备层:CPU、GPU等设备,主要负责神经网络算法中具体的运…

在SAP HANA中使用OData(二)

通常有两种方式通过OData来暴露SAP HANA中的数据库对象,一是直接使用Database Object,比如前一篇和本篇文章介绍的例子,这种方式针对于数据已经存在于SAP HANA中,在Repository中没有对应的设计时对象(Design-time Object)&#xf…

IT廉连看——Uniapp——页面样式与布局

IT廉连看——Uniapp——页面样式与布局 目标: 了解样式与布局的规范 熟记px和rpx的区别 全局样式与index样式的区别 一、查看uniapp框架简介——尺寸单位 px尺寸单位的使用是贯穿始终的。 [IT廉连看] 二、尺寸单位——实操效果 1、打开Hbuilder X并进入in…

幻兽帕鲁服务器哪家便宜?阿里云腾讯云京东云华为云对比

幻兽帕鲁服务器哪家便宜?阿里云腾讯云京东云华为云对比,阿里云更便宜,26元1个月。游戏服务器租用多少钱一年?1个月游戏服务器费用多少?阿里云游戏服务器26元1个月、腾讯云游戏服务器32元,华为云26元&#x…

【docker】CentOS 7上安装Docker的详细过程

🍎个人博客:个人主页 🏆个人专栏:软件的安装 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 1、更新系统: 2、添加Docker存储库: 3、安装Docker CE(社区版)&#xff1a…

Databend 开源周报第 133 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 了解对开放表格…