代码随想录-刷题第二十三天

669.修剪二叉搜索树

题目链接:669. 修剪二叉搜索树

思路:确定递归函数定义,根据定义去构造二叉搜索树。

class Solution {// 定义:删除 BST 中小于 low 和大于 high 的所有节点,返回结果 BSTpublic TreeNode trimBST(TreeNode root, int low, int high) {if (root == null) return null;if (root.val < low) {// 直接返回 root.right// 等于删除 root 以及 root 的左子树return trimBST(root.right, low, high);}if (root.val > high) {// 直接返回 root.left// 等于删除 root 以及 root 的右子树return trimBST(root.left, low, high);}// 闭区间 [lo, hi] 内的节点什么都不做root.left = trimBST(root.left, low, high);root.right = trimBST(root.right, low, high);return root;}
}

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

题目链接:108. 将有序数组转换为二叉搜索树

思路:题目要求构成一个左右平衡的二叉树,先找到数组的中间节点,作为根节点,然后根据中间节点左边的数组构建左子树,中间节点右边的数组构建右子树。递归过程中可以看出循环不变量的重要性!

class Solution {public TreeNode sortedArrayToBST(int[] nums) {return build(nums, 0, nums.length - 1);}// 左闭右闭区间[left, right]TreeNode build(int[] nums, int left, int right){if(left > right){return null;}int mid = left + (right - left) / 2;TreeNode root = new TreeNode(nums[mid]);root.left = build(nums, left, mid - 1);root.right = build(nums, mid + 1, right);return root;}
}

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

题目链接:538. 把二叉搜索树转换为累加树

思路:维护一个外部累加变量 sum,在遍历 BST 的过程中增加 sum,同时把 sum 赋值给 BST 中的每一个节点,就将 BST 转化成累加树了。但是注意顺序,正常的中序遍历顺序是先左子树后右子树,这里需要反过来,先右子树后左子树。

class Solution {public TreeNode convertBST(TreeNode root) {traverse(root);return root;}// 记录累加和int sum = 0;void traverse(TreeNode root) {if (root == null) {return;}// 注意:先右子树后左子树traverse(root.right);// 维护累加和sum += root.val;// 将 BST 转化成累加树root.val = sum;traverse(root.left);}
}

二叉树总结

二叉树题目中的注意点

1、二叉树中大部分题目使用递归,要想到递归三部曲

1、确定返回值,参数。2、确定终止条件。3、确定单层逻辑。

2、二叉树的题目遍历顺序非常重要,拿到一个题目首先要确定遍历顺序。

3、遇到二叉搜索树的题目,不要忘记二叉搜索树中序遍历的特性

二叉树题目类型

1、二叉树构造类题目,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。

2、求解普通二叉树属性,一般是后序,一般要通过递归函数的返回值做计算。

3、求解二叉搜索树属性,一定要优先考虑中序遍历的特性。

注意在普通二叉树的属性中,一般为后序,但是单纯求深度就用前序,二叉树:找所有路径也用了前序,这是为了方便让父节点指向子节点。所以求普通二叉树的属性还是要具体问题具体分析。


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

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

相关文章

scala表达式

1.8 表达式&#xff08;重点&#xff09; # 语句(statement)&#xff1a;一段可执行的代码# 表达式(expression)&#xff1a;一段可以被求值的代码&#xff0c;在Scala中一切都是表达式 - 表达式一般是一个语句块&#xff0c;可包含一条或者多条语句&#xff0c;多条语句使用“…

Android BluetoothAdapter 使用(二)

Android BluetoothAdapter 使用(二) 本篇文章主要讲下蓝牙设备的配对. 1: 蓝牙设备列表展示 下 面是蓝牙设备adapter的代码: package com.test.bluetooth;import android.bluetooth.BluetoothDevice; import android.content.Context; import android.view.LayoutInflater;…

算法通关村第十八关 | 青铜 | 回溯

1.回溯 回溯可以视为递归的拓展&#xff0c;有着明确的解题模板。 很大的不同之处是有一个撤销处理结果的操作&#xff0c;但是大框架就是遍历 N 叉树。 回溯主要解决暴力枚举都解决不了的问题。 回溯模板&#xff1a; void backtracking(参数) {if (终止条件) {存放结果;…

金融密钥管理方案:DUKPT

文章目录 DUKPT体系基本密钥KSNBDKIPEKFKTKDEK 资料来源 DUKPT体系 Dukpt&#xff08;Derived Unique Key Per Transaction&#xff09;是一种密钥管理方案&#xff0c;旨在提供对称加密密钥的安全生成和管理。它通常用于保护金融交易和其他安全关键的数据传输。Dukpt 最初是为…

Windows删除文件的时候提示有其他程序使用文件,无法删除,如何找到是谁再使用?

在Windows中&#xff0c;当你尝试删除一个文件时&#xff0c;如果系统提示该文件正在被其他程序使用&#xff0c;你可以通过以下步骤找到是哪个程序在使用该文件&#xff1a; 记下文件名&#xff1a;首先&#xff0c;记下无法删除的文件的完整路径和文件名。 使用"资源监…

Linux中的堡垒机搭建以及使用

JumpServer搭建 安装应用包 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash 一路回车即可安装完毕&#xff08;可根据需求更改&#xff09; JumpServer的 配置文件路径 /opt/jumpserver/config/config.tx…

【智能家居】九、停车场车牌识别功能点(回调、解耦)

一、翔云 人工智能开放平台&#xff08;车牌识别&#xff09; 二、cJSON 库 三、实现代码 四、回调函数 五、人脸识别和车牌识别获取数据的区别 六、异步网络请求和同步网络请求的区别 七、解耦 一、翔云 人工智能开放平台&#xff08;车牌识别&#xff09; 翔云 人工智能开放…

Ansible变量是什么?如何实现任务的循环?

Ansible 利用变量存储整个 Ansible 项目文件中可重复使用的值&#xff0c;从而可以简化项目的创建和维护&#xff0c;并减少错误的发生率。在定义Ansible变量时&#xff0c;通常有如下三种范围的变量&#xff1a; global范围&#xff1a;从命令行或Ansible配置中设置的变量&am…

.NET 反射优化的经验分享

比如针对 GetCustomAttributes 通过反射获取属性的优化,以下例子 // dotnet run -c Release -f net7.0 --filter "*" --runtimes net7.0 net8.0public class Tests{public object[] GetCustomAttributes() => typeof(C).GetCustomAttributes(typeof(MyAttribute…

坑爹的奥数(枚举法)

枚举法是一种解决问题的基本方法&#xff0c;它通过列举问题的所有可能情况来找到问题的解。这种方法适用于问题的解空间相对较小&#xff0c;可以通过穷举所有可能的解来找到最优解或满足特定条件的解。 以下是枚举法的一般步骤&#xff1a; 定义问题&#xff1a; 确定问题的…

Cypress安装与使用教程(2)—— 软测大玩家

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

《C++新经典设计模式》之第10章 迭代器模式

《C新经典设计模式》之第10章 迭代器模式 迭代器模式.cpp 迭代器模式.cpp #include <iostream> #include <vector> #include <list> #include <memory> using namespace std;// 遍历容器中的元素 // 迭代器单独实现为类模板&#xff0c;与容器模板解耦…

TypeScript 第三节:变量声明

一、命名规则 TypeScript 变量的命名规则与 JavaScript 一致&#xff0c;具体如下&#xff1a; 变量名必须以字母、下划线或美元符号&#xff08;$&#xff09;开头&#xff1b;变量名可以包含字母、数字、下划线或美元符号&#xff08;$&#xff09;&#xff1b;变量名区分大小…

数据库字段名和sql关键字冲突报错解决方法

1、修改实体类字段映射。注解里加反引号 2、sql字段上加反引号 3、问题解决

synchronized关键字的用法

synchronized关键字的用法 1、class monitor public synchronized static void staticSync()synchronized (ClassMonitor.class)2、this monitor public synchronized void sync()synchronized (this)3、monitor private final Object object new Object(); synchronized (…

class类实现operator==重载

利用 operator实现重载&#xff0c;实现两个类进行比较 1.不带参数的函数 #include <iostream> #include <string> using namespace std;class Person // 1.定义一个类 { public:Person(string name, int age){this->name name;this->age age;…

ue5材质预览界面ue 变黑

发现在5.2和5.1上都有这个bug 原因是开了ray tracing引起的&#xff0c;这个bug真是长时间存在&#xff0c;类似的bug还包括草地上奇怪的影子和地形上的影子等等 解决方法也很简单&#xff0c;就是关闭光追&#xff08;不是…… 就是关闭预览&#xff0c;在材质界面preview sc…

C# WPF上位机开发(会员充值软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在软件开发中&#xff0c;有一种很重要的控件&#xff0c;那就是表格。大家可以想象下&#xff0c;办公软件里面是不是就有一个专门做表格的软件&a…

路由器的转换原理--ENSP实验

目录 一、路由器的工作原理 二、路由表的形成 1、直连路由 2、非直连路由 2.1静态路由 2.2动态路由 三、静态路由和默认路由 1、静态路由 1.1静态路由的缺点 1.2路由的配置--结合ensp实验 2、默认路由--特殊的静态路由 2.1概念 2.2格式 2.3默认路由的配置--ens…

本地部署语音转文字(whisper,SpeechRecognition)

本地部署语音转文字 1.whisper1.首先安装Chocolatey2.安装3.使用 2.SpeechRecognition1.环境2.中文包3.格式转化4.运行 3.效果 1.whisper 1.首先安装Chocolatey https://github.com/openai/whisper 以管理员身份运行PowerShell Set-ExecutionPolicy Bypass -Scope Process -…