LeetCode 第23天

669. 修剪二叉搜索树
卡哥讲的两个遍历的方法不太听得懂,去题解找了一个和昨天的题类似的删除二叉树节点的方法,感觉好不错。但是还是挺难写出来的,需要判断的情况有点多,再加上递归,我有点泪目了。

class Solution {
public:// 感觉这个方法不错,抄了TreeNode* dfs(TreeNode* cur, int low, int high){// 返回if (cur == nullptr) return cur;// 遍历树cur->left = dfs(cur->left, low, high);cur->right = dfs(cur->right, low, high);// 删除节点if (cur->val < low || cur->val > high){// 叶子结点if (cur->left == nullptr && cur->right == nullptr) return nullptr;// 仅存在左子树else if (cur->left != nullptr && cur->right == nullptr) return cur->left;// 仅存在右子树else if (cur->left == nullptr && cur->right != nullptr) return cur->right;// 左右子树都存在时else {// 左子树接到右子树的最左节点TreeNode* tmp = cur->right;while (tmp->left) tmp = tmp->left;tmp->left = cur->left;// 返回右子树return cur->right;}}return cur;} TreeNode* trimBST(TreeNode* root, int low, int high) {// 头一次见两个递归的代码,真的廷听看不懂的// if (root == nullptr) return root;// if (root->val < low){//     TreeNode* right = trimBST(root->right, low ,high);//     return right;// }// if (root->val > high){//     TreeNode* left = trimBST(root->left, low, high);//     return left;// }// root->left = trimBST(root->left, low, high);// root->right = trimBST(root->right, low, high);// return root;return dfs(root, low, high);}
};

108. 将有序数组转换为二叉搜索树
这题类似二分查找,归并排序的方法,先找到中间节点,然后两边的分别递归继续找,直到左大于右停止,当左等于右的时候可以继续,然后多递归一次最后返回唯一的节点。遍历过程中需要用当前的结点接住递归返回的左右孩子,是一个好理解且很不错的题目。

class Solution {
public:TreeNode* traversal(vector<int>& nums, int left, int right){// 递归终止条件变为左大于右,等于时可取,因为本题左闭右闭if (left > right) return nullptr;int mid = (left + right)/2;// 每一半数组选取中间节点(向下取整)建立新节点TreeNode* root = new TreeNode(nums[mid]);// 左边接住返回的节点root->left = traversal(nums, left, mid-1);// 右边接住返回的节点root->right = traversal(nums, mid+1, right);return root;}TreeNode* sortedArrayToBST(vector<int>& nums) {return traversal(nums, 0 ,nums.size()-1);}
};

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

这题我还是比较自豪的,卡哥说可以用之前学过的双指针法,我就来自己尝试,发现二叉搜索树从右向左遍历就可以用前一个节点的值加上本节点的值得出结果,开心。递归边界什么的也比较常规,关键就是中序遍历。

class Solution {
public:
// 双指针法。yydsTreeNode* pre = nullptr;TreeNode* convertBST(TreeNode* root) {if (root == nullptr) return root;// 从右向左中序遍历,本节点的值就等于上一个节点的值加上本节点的值convertBST(root->right);if (pre != nullptr){root->val += pre->val;}pre = root;convertBST(root->left);// 结尾返回根节点return root;}
};

总结:二叉树已经刷完了,几乎所有题目都可以递归,也有少部分题目迭代比较简单。掌握递归传递参数、终止条件、递归体内处理逻辑、递归是否需要返回值等。二叉树的题目以前一直喜欢但又惧怕写递归,现在就是照葫芦画瓢写了一些题目,但是边摸索边前进,终究会有照亮的一天(大话)。

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

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

相关文章

STL - list

1、list的介绍及使用 1.1、list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元…

计算机网络(第六版)复习提纲21

SS4.6 互联网的路由选择协议 1 关于路由选择协议的基本概念 A 理想的路由算法&#xff08;路由选择协议的核心&#xff09;157 1 算法是正确和完整的 2 计算上简单 3 能适应通信量和网络拓扑的变化&#xff08;自适应性&#xff09; 4 稳定性 5 公平性 6 应当最佳&#xff08;特…

力扣hot100 对称二叉树 递归

Problem: 101. 对称二叉树 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考 Code 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …

深入解剖指针篇(3)

个人主页&#xff08;找往期文章&#xff09; &#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 二级指针 指针数组 指针数组模拟二维数组 字符指针变量 数组指针 数组指针初始化 二维数组传参的本质 函数指针 函数指针的使用 typedef关键字 函数指针数组 二级指针…

CDC 整合方案:Flink 集成 Confluent Schema Registry 读取 Debezium 消息写入 Hudi

本文介绍的整体方案选型是:使用 Kafka Connect 的 Debezium MySQL Source Connector 将 MySQL 的 CDC 数据 (Avro 格式)接入到 Kafka 之后,通过 Flink 读取并解析这些 CDC 数据,其中,数据是以 Confluent 的 Avro 格式存储的,也就是说,Avro 格式的数据在写入到 Kafka 以…

缓存击穿,商详页进不去了!!!

故事 对于小猫来讲&#xff0c;最近的一段日子是不好过的&#xff0c;纵使听着再有节拍的音乐&#xff0c;也换不起他对生活的热情。由于上一次“幂等事件”躺枪&#xff0c;他已经有几天没有休息好了。他感觉人生到了低谷。 当接手这个商城项目之后&#xff0c;他感觉他一直没…

视频怎么加水印?分享两个简单的加水印的方法

在数字媒体时代&#xff0c;视频已经成为信息传播的重要方式。许多人在创作视频是会加上自己独特的水印&#xff0c;防止视频被盗用。水印作为数字版权保护技术的一种&#xff0c;可以有效地防止视频被非法复制、传播或篡改&#xff0c;从而保护创作者的权益和利益。下面我分享…

关闭idea之后,项目还在运行,端口被占用

今天在写项目的时候&#xff0c;中途安装了一个插件&#xff0c;而且插件显示需要重启idea&#xff0c;重启的时候项目正在运行&#xff0c;重启之后发现idea没有显示有项目正在运行&#xff0c;当我要开启项目的时候&#xff0c;发现无法开启&#xff0c;显示端口被占用了&…

【leetcode题解C++】654.最大二叉树 and 617.合并二叉树

654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums …

C++ QT入门2——记事本功能实现与优化(事件处理+基本控件)

C QT入门2——记事本功能优化&#xff08;事件处理基本控件&#xff09; 一、记事本功能优化编码乱码问题QComboBox下拉控件QString、string、char * 间的数据转化编码问题解决整合 光标行列值显示记事本打开窗口标题关闭按钮优化—弹窗提示快捷键设计 二、☆ QT事件处理事件处…

flutter GridView控件实践

gridView顶部自带padding问题 如图所示&#xff1a; 顶部有一个比较大的padding。 如何处理&#xff1a;给gridView设置&#xff1a;padding: EdgeInsets.zero,

关于torch_xla.core.xla_model无法导入的问题

直接使用pip install或github中的代码发现仍然无法成功导入torch_xla.core.xla_model&#xff0c; 在conda中conda list发现存在torch_xla为1.0版本&#xff0c;尝试更新发现只有该版本。发现conda_xla库内除了__init__.py以外&#xff0c;没有任何文件。在__init__.py中提示包…

算法价值2-空间复杂度

空间复杂度是算法在运行过程中所需的额外空间和输入规模之间的关系。与时间复杂度类似&#xff0c;空间复杂度也通常使用大O符号&#xff08;O&#xff09;来表示。 以下是一些常见的空间复杂度的例子&#xff1a; 1. O(1) - 常数空间复杂度 表示算法的空间需求是一个常数&am…

Java 正则匹配sql

文章目录 正则匹配sql表名称insert intoupdate 正则表达式什么时候要加^$ 在线正则校验 正则匹配sql表名称 insert into insert into PING_TABLE (CODE, NAME) VALUES(0, 待提交),(1, 审核中),(2, 审核通过),(3, 已驳回); regex -> insert\sinto\s(\w)\s*\(?update upda…

UnityShader(十三)Unity内置的函数

在计算光照模型时我们需要得到许多数据&#xff0c;比如光源方向、视角方向这种基本信息。 在之前的例子中都是自行在代码里计算的&#xff0c;比如&#xff1a; normalize(_WorldSpaceLight0Pos.xyz) 得到光源方向&#xff08;这种方法实际只适用平行光&#xff09; normaliz…

Spring MVC 框架无法找到合适的消息转换器

报错信息如下&#xff1a; 2024-02-02 16:58:29.832 ERROR 15768 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exce…

架构整洁之道-组件构建原则

5 组件构建原则 大型软件系统的架构过程与建筑物修建很类似&#xff0c;都是由一个个小组件组成的。所以&#xff0c;如果说SOLID原则是用于指导我们如何将砖块砌成墙与房间的&#xff0c;那么组件构建原则就是用来指导我们如何将这些房间组合成房子的。 5.1 组件 组件是软件的…

Go语言学习踩坑记

go: go.mod file not found in current directory or any parent directory; see go help mod 解决 资源下载&#xff1a; 序号文件地址1 1、Go IDE liteidex38.3-win64-qt5.15.2.zip Release x38.3 visualfc/liteide GitHub2 2、Go语言的编译环境 go1.21.6.windows-amd64.m…

想好新年去哪了吗?合合信息扫描全能王用AI“留住”年味

还有不到十天&#xff0c;除夕就要到了。近几年春节假期中&#xff0c;有人第一次带着孩子直击海面冰风&#xff0c;坐船回老家&#xff1b;也有人选择“漫游”国内外&#xff0c;在旅行中迎接新春的朝气。合合信息旗下扫描全能王APP通过AI扫描技术&#xff0c;提供了一种全新的…

Acwing---798.差分矩阵

差分矩阵 1.题目2.基本思想3.代码实现 1.题目 输入一个 n n n 行 m m m列的整数矩阵&#xff0c;再输入 q q q 个操作&#xff0c;每个操作包含五个整数 x 1 , y 1 , x 2 , y 2 , c x1,y1,x2,y2,c x1,y1,x2,y2,c&#xff0c;其中 ( x 1 , y 1 ) (x1,y1) (x1,y1) 和 ( x …