随想录二刷Day24——二叉树

很久没有刷算法题了,又荒废了,习惯还得保持啊,希望能坚持一天1~2道题。

文章目录

  • 二叉树
    • 32. 将有序数组转换为二叉搜索树
    • 33. 把二叉搜索树转换为累加树

二叉树

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

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

思路:
有序数组要生成普通二叉树,只需要简单的一长溜就可以了。所以题目要求生成平衡二叉树。要平衡,就要左右子树的节点数最多相差1,自然而然,从数组的中间划分为左右子树,就显得很容易。

方法1: 递归法

递归的思路很清晰,对左右区间递归构造二叉搜索树即可。

class Solution {
public:TreeNode* sortedArrayToBST(vector<int>& nums) {TreeNode *root = Transfer(nums, 0, nums.size() - 1);return root;}private:TreeNode* Transfer(vector<int>& nums, int left, int right) {if (left > right) return nullptr;int mid = left + ((right - left)>>1);TreeNode *root = new TreeNode(nums[mid]);root->left = Transfer(nums, left, mid - 1);root->right = Transfer(nums, mid + 1, right);return root;}
};

方法2:迭代法

同递归法的思路,只不过要利用队列存储当前处理区间的当前处理节点。

class Solution {
public:TreeNode* sortedArrayToBST(vector<int>& nums) {if (nums.size() == 0) return nullptr;TreeNode *root = new TreeNode(0);queue<TreeNode *> nodeQue; // 栈顶是当前处理到的节点queue<int> leftQue; // 存当前处理区间的左边界queue<int> rightQue; // 存当前处理区间的有边界nodeQue.push(root); // 初始处理节点是根节点leftQue.push(0); // 初始左边界是 0rightQue.push(nums.size() - 1); // 初始右边界while (!nodeQue.empty()) {TreeNode *curNode = nodeQue.front(); nodeQue.pop();int left = leftQue.front(); leftQue.pop();int right = rightQue.front(); rightQue.pop();int mid = left + ((right - left) >> 1);curNode->val = nums[mid];// 先处理左区间if (left < mid) {curNode->left = new TreeNode(0);nodeQue.push(curNode->left);leftQue.push(left);rightQue.push(mid - 1);}// 再处理右区间if (right > mid) {curNode->right = new TreeNode(0);nodeQue.push(curNode->right);leftQue.push(mid + 1);rightQue.push(right);}}return root;}
};

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

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

思路:
二叉搜索树变成累加树,题干说的听抽象的,看不太懂,观察样例可以看出,根节点值是自身和右子树的累加和,左子节点是自身和根节点新值的累加。其实就是得到后续遍历的结果,再从左向右依次累加。
在遍历过程中处理,需要记录一个 pre 值,表示前一个节点的值,方便做累加。

方法1:递归法

class Solution {
public:TreeNode* convertBST(TreeNode* root) {pre = 0;Transfer(root);return root;}private:int pre = 0;void Transfer(TreeNode* root) {if (root == nullptr) return ;Transfer(root->right); // 右// 中root->val += pre;pre = root->val;Transfer(root->left); // 左}
};

方法2:迭代法

典型的后续遍历模板

class Solution {
public:TreeNode* convertBST(TreeNode* root) {Transfer(root);return root;}private:void Transfer(TreeNode* root) {int pre = 0;stack<TreeNode *> stk;TreeNode *cur = root;while (cur != nullptr || !stk.empty()) {if (cur != nullptr) { // 右stk.push(cur);cur = cur->right;} else {// 中cur = stk.top(); stk.pop();cur->val += pre;pre = cur->val;cur = cur->left; // 左}}}
};

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

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

相关文章

[带余除法寻找公共节点]二叉树

二叉树 题目描述 如上图所示&#xff0c;由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结点&#xff08;编号是1的结点&#xff09;都有一条唯一的路径&#xff0c;比如从10到根结点的路径是(10, 5, 2, 1)&#xff0c;从4到根结点的路径是(4, 2, 1)&#x…

DBeaver连接MySQL提示“Public Key Retrieval is not allowed“问题解决方式

更新时间&#xff1a;2023年10月31日 11:37:53 作者&#xff1a;产品人小柒 dbeaver数据库连接工具,可以支持几乎所有的主流数据库.mysql,oracle.sqlserver,db2 等等,这篇文章主要给大家介绍了关于DBeaver连接MySQL提示"Public Key Retrieval is not allowed"问…

在CentOS上安装Nginx服务

配置EPEL源&#xff1a;首先&#xff0c;你需要安装EPEL源&#xff0c;这是一个为RHEL和CentOS提供额外软件包的存储库。你可以通过运行以下命令来安装EPEL源&#xff1a; sudo yum install -y epel-release sudo yum -y update安装Nginx&#xff1a;接下来&#xff0c;你可以…

Elasticsearch 聚合查询(Aggregation)详解

Elasticsearch中的聚合查询&#xff0c;类似SQL的SUM/AVG/COUNT/GROUP BY分组查询&#xff0c;主要用于统计分析场景。 实例&#xff1a; import org.apache.http.HttpHost; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.…

yolov5检测(前向)输入视频输出(不在图上画标签形式的原)图片的方法,及设置每隔几帧保存的方式(不每帧保存减少重复)

这些天我忽然有个需求&#xff0c;要更新迭代一个场景的检测模型&#xff0c;甲方爸爸提供的新数据集是监控视频形式的(因为拍视频确实更加的方便)&#xff0c;而我训练模型确实要标注好的图片形式。 根据这些条件的话&#xff0c;思路应该是要这样的&#xff1a;首先使用现有的…

记一次oracle错误处理

16:00:05 SQL> alter database open; alter database open * 第 1 行出现错误: ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项 16:00:49 SQL> startup ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它 16:02:56 SQL> shutdown immediate O…

大数据平台/大数据技术与原理-实验报告--实战HDFS

实验名称 实战HDFS 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.10.23-2023.10.27 实验仪器设备以及实验软硬件要求 专业实验室&#xff08;配有centos7.5系统的linu…

15. 三树之和(双指针)

这道题的思路是排序双指针。 对于排好序的数组&#xff0c;存在以下几种情况&#xff1a; 当元素i为正数时&#xff0c;其之后的数字不在存在三数之和等于0的情况了。当元素i为负数或0时&#xff0c;为了避免重复&#xff0c;依次从头遍历数组&#xff0c;检查当前元素i之后的…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑碳排放分摊的综合能源服务商交易策略》

这篇文章的标题表明它将讨论一个关于综合能源服务商交易策略的主题&#xff0c;而在这个策略中&#xff0c;特别考虑了碳排放分摊的因素。以下是对标题中各关键词的解读&#xff1a; 综合能源服务商&#xff1a; 这指的是在能源领域提供多种服务的企业或组织&#xff0c;可能涵…

蓝桥杯day01——负二进制数相加

题目描述 给出基数为 -2 的两个数 arr1 和 arr2&#xff0c;返回两数相加的结果。 数字以 数组形式 给出&#xff1a;数组由若干 0 和 1 组成&#xff0c;按最高有效位到最低有效位的顺序排列。例如&#xff0c;arr [1,1,0,1] 表示数字 (-2)^3 (-2)^2 (-2)^0 -3。数组形式…

「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在Web应用程序之间进行通信的协议&#xff0c;通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…

C++之哈希

unordered系列容器的效率之所以比较高(尤其是查找),是因为它底层使用了哈希结构,即哈希表. 哈希概念 前言: 顺序结构以及平衡树中, 元素关键码与其存储位置之间没有对应的关系, 因此在查找一个元素 时, 必须要经过关键码的多次比较. 顺序查找时间复杂度为O(N), 平衡树中为树的…

ESP32-Web-Server编程- JS 基础 4

ESP32-Web-Server编程- JS 基础 4 概述 HTML 内联事件处理器&#xff0c;你永远不应该使用 HTML 事件处理器属性——因为那些已经过时了&#xff0c;使用它们是不好的做法。 在前端编程中&#xff0c;除了将期望发生的事件写为 JS 文件外&#xff0c;还可以使用一些组件自带…

java编程:⼀个⽂件中存储了本站点下各路径被访问的次数,请编程找出被访问次数最多的10个路径

题目 编程题&#xff1a;⼀个⽂件&#xff08;url_path_statistics.txt&#xff09;中存储了本站点下各路径被访问的次数 请编程找出被访问次数最多的10个路径时间复杂是多少&#xff0c;是否可以优化&#xff08;假设路径数量为n&#xff09;如果路径访问次数⽂件很⼤&#x…

Unity中Shader的BRDF解析(二)

文章目录 前言一、回顾一下上一篇的结尾在这里插入图片描述 二、我们来解析一下 UNITY_PBS_USE_BRDF1&#xff08;高配&#xff09;1、迪士尼BRDF原则2、迪士尼的漫反射函数3、参数&#xff1a;perceptualRoughness&#xff08;感性的粗糙度&#xff09;4、参数&#xff1a;hal…

Docker-简介、基本操作

目录 Docker理解 1、Docker本质 2、Docker与虚拟机的区别 3、Docker和JVM虚拟化的区别 4、容器、镜像的理解 5、Docker架构 Docker客户端 Docker服务器 Docker镜像 Docker容器 镜像仓库 Docker基本操作 1、Docker镜像仓库 镜像仓库分类 镜像仓库命令 docker lo…

NET MVC中使用Element-Plus框架编写组件

一、目的 在NET MVC中使用Element-Plus编写可重复使用的组件。 二、准备工作 2.1 NET MVC项目 2.2 MVC项目中使用Element-Plus框架。不熟悉的可以参考此文章&#xff1a; NET MVC中如何使用Element-Plus-CSDN博客 三、组件编写 3.1、新建一个MVC的部分视图页面&#xff…

完整版本会声会影2024新功能介绍

会声会影视频编辑软件&#xff0c;是视频制作初学者的法宝。其友好的操作界面&#xff0c;让视频制作小白也能轻松上手&#xff0c;丰富的媒体库资源&#xff0c;只需一拖一放就能快速导入编辑轨道。多轨道式的编辑功能&#xff0c;让各种素材的搭配使用更加得心应手。 会声会影…

管网/黑臭水/污水水质监测系统

随着城市化进程的加快&#xff0c;城市水务管理面临着越来越多的挑战。其中&#xff0c;管网、黑臭水、污水等水质监测问题尤为突出。为了解决这些问题&#xff0c;越来越多的城市开始应用先进的水质监测系统。 一、系统概述 管网/黑臭水/污水水质监测系统是一款集成了在线监测…

【Python炫技】如何突破网站识别爬取功能?

文章目录 概要技术细节小结 概要 现在有很多网站&#xff0c;已经能够通过JA3或者其他指纹信息&#xff0c;来识别你的请求是不是Requests发起的。这种情况下&#xff0c;你无论怎么改Headers还是代理&#xff0c;都没有任何意义。 我之前写过一篇文章&#xff1a;Python如何…