代码随想录day20

654.最大二叉树

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

  • 二叉树的根是数组中的最大元素。
  • 左子树是通过数组中最大值左边部分构造出的最大二叉树。
  • 右子树是通过数组中最大值右边部分构造出的最大二叉树。

通过给定的数组构建最大二叉树,并且输出这个树的根节点。

        构造树一般采用的是前序遍历,每次找数组的最大值,因为先构造中间节点,然后递归构造左子树和右子树。

class Solution {
public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {// 构造根节点TreeNode* node=new TreeNode(0);// 找数组的最大值int maxval=0;int maxidx=0;for(int i=0;i<nums.size();++i){if(nums[i]>maxval){maxval=nums[i];maxidx=i;}}node->val=maxval;// 构造左子树if (maxidx>0) {vector<int> newVec(nums.begin(), nums.begin() + maxidx);node->left = constructMaximumBinaryTree(newVec);}// 构造右子树if (maxidx<(nums.size() - 1)) {vector<int> newVec(nums.begin() + maxidx + 1, nums.end());node->right = constructMaximumBinaryTree(newVec);}return node;}
};

        由于每次都构造一个新数组,优化后,无需构造新数组,直接传入左右数组的下标。

class Solution {
public:TreeNode* travel(vector<int> &nums,int left,int right){//左右下标不能相等if(left>=right) return nullptr;//找最大值int maxidx=left;for(int i=left+1;i<right;++i){if(nums[i]>nums[maxidx]){maxidx=i;}}//构造根节点TreeNode* root=new TreeNode(nums[maxidx]);//构造左节点 左闭右开root->left=travel(nums,left,maxidx);//构造右节点root->right=travel(nums,maxidx+1,right);return root;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return travel(nums,0,nums.size());}
};

617.合并二叉树         

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

         使用先序遍历。

class Solution {
public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(root1==nullptr){return root2;}if(root2==nullptr){return root1;}//先序遍历TreeNode* root=new TreeNode(root1->val+root2->val);root->left=mergeTrees(root1->left,root2->left);root->right=mergeTrees(root1->right,root2->right);return root;}
};

700.二叉搜索树中的搜索 

给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。

二叉搜索树是一个有序树:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树
class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {if(root==nullptr||root->val==val) return root;TreeNode *res=nullptr;if(root->val>val) res=searchBST(root->left,val);if(root->val<val) res=searchBST(root->right,val);return res;}
};

98.验证二叉搜索树 

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。

有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。

可以递归中序遍历将二叉搜索树转变成一个数组,后只要比较一下,这个数组是否是有序的,注意二叉搜索树中不能有重复元素

class Solution {
public:void isvaild(vector<int> &ans,TreeNode* root){if(root==nullptr) return;isvaild(ans,root->left);ans.push_back(root->val);isvaild(ans,root->right);}bool isValidBST(TreeNode* root) {vector<int> ans;isvaild(ans,root);for(int i=0;i<ans.size()-1;++i){if(ans[i]>=ans[i+1]) return false;}return true;}
};

 

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

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

相关文章

《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)

目录 开头语内存飙升问题分析与案例问题背景&#xff1a;我华为云的一个服务器运行我的一个项目“csdn-automatic-triplet-0.0.1-SNAPSHOT.jar”&#xff0c;由于只是用来测试的服务器&#xff0c;只有2G&#xff0c;所以分配给堆的内存1024M查询内存使用&#xff08;top指令&a…

Oracle-查询用户下所有表的数据量

一般我们通过count()语句就可以查询单张标的数据量&#xff0c;但是遇到很多情况&#xff0c;查询多张表&#xff0c;数据量特别大的时候&#xff0c;就比较慢&#xff0c;耽搁时间&#xff0c;毕竟开发的时间还是很宝贵的&#xff1b; 也有通过下面的SQL去查询数据量&#xf…

恒温器探针样品座

恒温器探针样品座是一种用采用可移动探针完成恒温器电缆和被测样品的电学连接&#xff0c;避免了每次样品电引线的焊接&#xff0c;探针可移动&#xff0c;5mm--20mm大小的样品均可适用&#xff0c;探针可以安装6个&#xff0c;标准配置探针数量为4个。 恒温器探针样品座由T型…

云渲染农场渲染和自己搭建农场渲染怎么选?哪个更划算?

&#xfeff;当我们面临繁重或紧急的渲染任务时&#xff0c;通常会选择云渲染的解决方案。可能很多人会问&#xff0c;我们是否能够自行建立一个小型的个人农场进行渲染呢&#xff1f;与云渲染农场相比&#xff0c;哪个更划算&#xff1f;更方便&#xff1f;接下来就带大家看看…

vue-echarts踩坑,本地开发可以渲染echarts图表,线上环境图表渲染不出来

main.js全局注册v-chart组件 import VueECharts from "vue-echarts"; Vue.component("v-chart", VueECharts);在页面中使用 如上图&#xff0c;我开始写的静态数据&#xff0c;在data中定义了chartOption1:{…配置项…}, 在接口数据返回之后&#xff0c;…

Nodejs基础3之fs模块的文件重命名和移动、文件的删除、文件夹操作、查看资源状态、fs路径

Nodejs基础二 fs模块文件重命名和移动文件的重命名文件的移动同步重命名和移动 文件的删除使用unlink进行删除unlink异步删除unlinkSync同步删除 使用rm进行删除rm异步删除rmSync同步删除 文件夹操作创建文件夹递归创建文件夹 读取文件夹删除文件夹rmdir删除文件夹删除递归文件…

电脑怎么把照片的kb缩小?三种方法帮你解决

电脑怎么把照片的kb缩小&#xff1f;我们在进行上传图片的时候&#xff0c;经常遇到图片太大&#xff0c;请压缩后再上传的情况&#xff0c;这就是我们开头所需要了解的压缩图片大小的方法&#xff0c;图片缩小kb可以通过三种处理方式来达到效果&#xff0c;我们可以直接图片压…

46道java基础知识面试题详解含答案(值得珍藏)

final 有什么用&#xff1f; 用于修饰类、属性和方法&#xff1b;被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变&#xff0c;被final修饰不可变的是变量的引用&#xff0c;而不是引用指向的内容&#xff0c;引用指向的内容是可以改…

在线协作白板WBO本地部署启动并结合内网穿透实现远程协同办公

文章目录 推荐前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cpolar4. 配置WBO公网访问地址5. 公网远程访问WBO白板6. 固定WBO白板公网地址 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击…

【LeetCode: 208. 实现 Trie (前缀树)】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

一分钟带你了解--电商控价

电商行业发展至今带来了许多机遇&#xff0c;但同时也伴随着一些挑战。品牌电商在运营过程中&#xff0c;面临着诸如乱价、低价、窜货和假货等问题&#xff0c;这些问题不仅损害了品牌的形象和价值&#xff0c;也破坏了市场秩序&#xff0c;侵害了消费者的权益。 电商控价是解…

深度探讨 Golang 中并发发送 HTTP 请求的最佳技术

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在 Golang 领域&#xff0c;并发发送 HTTP 请求…

java常用API(2)

1&#xff1a;String 1.1 String(构造方法) 首先&#xff0c;我们先来学习String类&#xff0c;它涉及到两个案例&#xff1a;用户登录和聊天室。 先来看用户登录案例&#xff1a;需要输入用户名和密码&#xff0c;和已知的用户名和密码进行比较&#xff0c;涉及到比较的方法…

抖音小店如何选品?新手怎么选有潜力的产品?常用选品玩法分享

大家好&#xff0c;我是电商花花。 选品是我们店铺出单的关键&#xff0c;也是我们做电商行业的小伙伴非常关心的一个点。 我们想要选好商品&#xff0c;我们就要先搞清楚&#xff0c;什么样的产品才算是有潜力的产品&#xff0c;什么样的产品才能出单&#xff0c;什么样的产…

使用pandas读取HTML和JSON数据

大家好&#xff0c;Pandas是一个功能强大的数据分析库&#xff0c;它提供了许多灵活且高效的方法来处理和分析数据。本文将介绍如何使用Pandas读取HTML数据和JSON数据&#xff0c;并展示一些常见的应用场景。 一、读取HTML网页 HTML&#xff08;超文本标记语言&#xff09;是…

【HTML5】 canvas 绘制图形

文章目录 一、基本用法二、用法详见2.0、方法属性2.1、绘制线条2.2、绘制矩形2.3、绘制圆形2.4、绘制文本2.5、填充图像 一、基本用法 canvas 标签&#xff1a;可用于在网页上绘制图形&#xff08;使用 JavaScript 在网页上绘制图像&#xff09;画布是一个矩形区域&#xff0c…

MATLAB R2023b for Mac 中文

MATLAB R2023b 是 MathWorks 发布的最新版本的 MATLAB&#xff0c;适用于进行算法开发、数据可视化、数据分析以及数值计算等任务的工程师和科学家。它包含了一系列新增功能和改进&#xff0c;如改进了数据导入工具&#xff0c;增加了对数据帧和表格对象的支持&#xff0c;增强…

从零到一:设计实现Dubbo分布式服务框架

从零到一&#xff1a;设计实现Dubbo分布式服务框架 前言 Dubbo是一款高性能的Java RPC框架&#xff0c;广泛应用于大规模的分布式系统。本篇博客将详细介绍如何从零开始设计和实现一个简单的Dubbo框架&#xff0c;以便理解Dubbo的核心概念和工作原理。 第一步&#xff1a;定…

医疗电子市场分析:预计2029年将达到2204亿美元

随着人口老龄化趋势日益明显&#xff0c;高效、精准、全面的医疗服务需求将迅速增长&#xff0c;医疗电子行业将迎来广阔的市场前景。医疗电子是指将电子技术和信息技术与医学相结合&#xff0c;应用于医疗领域的技术和产品。其主要目的是通过电子技术来实现医疗设备和系统的智…

面试150-69(Leetcode104二叉树的最大深度)

代码&#xff1a; 0117 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode righ…