代码随想录算法训练营第十九天|Day19二叉树

news2024/10/19 23:28:36

669. 修剪二叉搜索树

题目链接/文章讲解: https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html

视频讲解: https://www.bilibili.com/video/BV17P41177ud

思路

struct TreeNode* trimBST(struct TreeNode* root, int low, int high) {
    if (root == NULL) {
        return NULL;
    }
    if (root->val < low) {
        return trimBST(root->right, low, high);
    }
    if (root->val > high) {
        return trimBST(root->left, low, high);
    }
    root->left = trimBST(root->left, low, high);
    root->right = trimBST(root->right, low, high);
    return root;
}

学习反思

通过递归的方式对树进行修剪。首先判断根节点的值与范围的关系,如果根节点的值小于范围的下限 low,就递归修剪右子树,返回右子树作为修剪后的树的根节点;如果根节点的值大于范围的上限 high,就递归修剪左子树,返回左子树作为修剪后的树的根节点;如果根节点的值在范围内,就递归修剪左右子树,并更新根节点的左右子节点为修剪后的左右子树。最后返回根节点。时间复杂度是 O(N)。

108.将有序数组转换为二叉搜索树

题目链接/文章讲解:

https://programmercarl.com/0108.%E5%B0%86%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E8%BD%AC%E6%8D%A2%E4%B8%BA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html

视频讲解:https://www.bilibili.com/video/BV1uR4y1X7qL

思路

struct TreeNode* sortedArrayToBSTHelper(int* nums, int left, int right) {
    if (left > right) {
        return NULL;
    }
    int mid = left + (right - left) / 2; 
    struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode)); 
    root->val = nums[mid]; 
    root->left = sortedArrayToBSTHelper(nums, left, mid - 1); 
    root->right = sortedArrayToBSTHelper(nums, mid + 1, right); 
    return root; 
}

struct TreeNode* sortedArrayToBST(int* nums, int numsSize) {
    return sortedArrayToBSTHelper(nums, 0, numsSize - 1); 
}

学习反思

将一个有序数组转换为一棵平衡二叉搜索树的函数实现。函数的思路是通过递归的方式,每次取数组的中间值作为根节点,并以中间值为分界点将数组分为左右两部分,然后分别递归构建左子树和右子树。时间复杂度是O(n)。

538.把二叉搜索树转换为累加树

题目链接/文章讲解:

https://programmercarl.com/0538.%E6%8A%8A%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E8%BD%AC%E6%8D%A2%E4%B8%BA%E7%B4%AF%E5%8A%A0%E6%A0%91.html

视频讲解:https://www.bilibili.com/video/BV1d44y1f7wP

思路

void convertBSTHelper(struct TreeNode* node, int* sum) {
    if (node == NULL) {
        return;
    }
    convertBSTHelper(node->right, sum);
    *sum += node->val;
    node->val = *sum;
    convertBSTHelper(node->left, sum);
}

struct TreeNode* convertBST(struct TreeNode* root) {
    int sum = 0; 
    convertBSTHelper(root, &sum);
    return root; 
}

学习反思

函数通过逆中序遍历的方式遍历二叉搜索树,递归地更新每个节点的值。先遍历右子树,然后更新累加和,将当前节点的值更新为累加和,最后遍历左子树。时间复杂度是O(n)。

总结

加油!!!

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

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

相关文章

编码方式知识整理【ASCII、Unicode和UTF-8】

编码方式 一、ASCII编码二、Unicode 编码三、UTF-8编码四、GB2312编码五、GBK编码 计算机中对数据的存储为二进制形式&#xff0c;但采用什么样的编码方式存储&#xff0c;效率更高。主要编码方式有 ASCII、Unicode、UTF-8等。 英文一般为1个字节&#xff0c;汉字一般为3个字节…

智联云采 SRM2.0 testService SQL注入漏洞复现

0x01 产品简介 智联云采是一款针对企业供应链管理难题及智能化转型升级需求而设计的解决方案,针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

Pytorch复习(二)

一、非线性回归 import torch import matplotlib.pyplot as plt from torch import nn,optim from torch.autograd import Variable import numpy as npx_data np.linspace(-2,2,200)[:,np.newaxis] noise np.random.normal(0,0.2,x_data.shape) y_data np.square(x_data) …

.Net自动更新程序GeneralUpdate,适用于wpf,winfrom,控制台应用

GeneralUpdate是基于.net framwork4.5.2开发的一款&#xff08;c/s应用&#xff09;自动升级程序。 第一个版本叫Autoupdate 有人会奇怪为什么会改名称&#xff0c;稍微解释一下是因为在nuget上有重名的项目再者就是新版本更新功能不仅限于wpf程序的更新。 将更新的核心部分抽…

VS Code开发qt项目

没整明白&#xff0c;尴尬 安装扩展 设置cmake路径 前提是已经安装了QT 报错 用msvc选windows启动&#xff0c;用mingw则选gdb启动

pandas处理时间序列-基础入门

公众号&#xff1a;尤而小屋编辑&#xff1a;Peter作者&#xff1a;Peter 大家好&#xff0c;我是Peter~ Pandas 是一个强大的 Python 数据分析库&#xff0c;它提供了非常灵活和高效的方式来处理时间序列数据。 时间序列数据是指按照时间顺序排列的数据点集合&#xff0c;通…

LabVIEW示波器通信及应用

基于LabVIEW平台开发的罗德与施瓦茨示波器通信与应用系统实现了示波器的远程控制及波形数据的实时分析&#xff0c;通过TCP/IP或USB接口与计算机通信&#xff0c;利用VISA技术进行指令传输&#xff0c;从而实现高效的数据采集与处理功能。 项目背景 随着现代电子测试需求的日益…

滑铁卢大学大模型公开课资料来了,大模型入门到精通,非常详细收藏我这一篇就够了

今天给大家推荐的是加拿大滑铁卢大学大模型公开课资源&#xff0c;根据QS世界大学排名&#xff0c;其计算机专业排名全球22。 课程内容主要分为五部分&#xff1a;大模型基础、Transformer架构、大语言模型、多模态大模型、智能体。 每一课除了PPT和视频链接&#xff0c;还有…

013_django基于大数据的高血压人群分析系统2024_dcb7986h_055

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

VScode实现服务器免密登录(亲测有效)

目录 1 免密步骤1.1 在本地生成密钥1.2 在vscode中下载Remote-SSH1.3 配置SSH文件1.4 在服务器中添加本地公开密钥1.5 远程免密连接试验 2 后记 1 免密步骤 1.1 在本地生成密钥 window R打开命令面板 ssh-keygen1.2 在vscode中下载Remote-SSH 1.3 配置SSH文件 本地密钥的文…

Java 入门基础篇14 - java面向对象思想以及特性

学习目标&#xff1a; 一、目标 面向对象思想类和对象对象的创建和使用属性和方法封装 开始学习&#xff1a; 二、编程思想 2.1 什么是编程思想 做人有做人的原则&#xff0c;编程也有编程的原则。这些编程的原则&#xff0c;就叫做编程思想。 2.2 面向过程和面向对象 二…

卡尔曼讲解与各种典型进阶MATLAB编程(专栏目录,持续更新……)

专栏链接&#xff1a;https://blog.csdn.net/callmeup/category_12574912.html 文章目录 专栏介绍重点文章卡尔曼滤波的原理卡尔曼滤波的例程 进阶MATLAB编程后续更新 专栏介绍 本专栏旨在深入探讨卡尔曼滤波及其在各类应用中的实现&#xff0c;尤其是通过MATLAB编程进行的典…

C++实现 对象移动 移动语义(什么是右值引用)

右值引用 为了支持移动操作&#xff0c;C11增加了右值引用。 使用&&来定义 //int &num100;//错误的使用方法&#xff0c;引用不能引用常量int &&num100;//正确的//同样 int b10; //int &mb*93;//错误的 int &&mb*93;//正确的//当然&#xff0…

什么是DevOps,如何才能获取DevOps相关实践

DevOps 是 “Development”&#xff08;开发&#xff09;和 “Operations”&#xff08;运维&#xff09;的缩写&#xff0c;代表一种融合开发和运维的文化和实践。它强调开发团队与运维团队的协作&#xff0c;通过自动化流程和持续交付&#xff0c;提高软件交付的速度、质量和…

通过Express + Vue3从零构建一个用户认证与授权系统(三)前端应用工程构建

前言 接下来&#xff0c;我们将使用 Vue 3、TypeScript 和 Vite 构建一个前端应用&#xff0c;与之前构建的后端 API 无缝对接。此前端将处理用户认证、显示用户数据、管理角色和权限&#xff0c;并确保与后端的安全通信。首先&#xff0c;我们来构建一个满足基本开发的前端应…

Spring6梳理14——依赖注入之P命名空间

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①搭建模块 ②引入配置文件 ③创建bean-dip.xml文件 ④创建课程类文件 ⑤创建学生…

【C++】string类(2)

&#x1f973;个人主页: 起名字真南 &#x1f973;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 引言1 模拟实现string类基本框架2 实现string类中的主要成员函数2.1 Push_Back 函数2.2 reserve 函数2.3 append 函数2.4 c_str 函数2.5 begin ,end 函数2.5 operator 函数2.6…

FileLink内外网文件交换——致力企业高效安全文件共享

随着数字化转型的推进&#xff0c;企业之间的文件交流需求日益增加。然而&#xff0c;传统的文件传输方式往往无法满足速度和安全性的双重要求。FileLink作为一款专注于跨网文件交换的工具&#xff0c;致力于为企业提供高效、安全的文件共享解决方案。 应用场景一&#xff1a;项…

Python酷玩之旅_数据分析入门(matplotlib)

导览 前言matplotlib入门1. 简介1.1 Pairwise data1.2 Statistical distributions1.3 Gridded data1.4 Irregularly gridded data1.5 3D and volumetric data 2. 实践2.1 安装2.2 示例 结语系列回顾 前言 翻看日历&#xff0c;今年的日子已划到了2024年10月19日&#xff0c;今天…

网络空间安全之一个WH的超前沿全栈技术深入学习之路(一:渗透测试行业术语扫盲)作者——LJS

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️网络空间安全——全栈前沿技术持续深入学习 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️ MYSQL REDIS Advanc…