代码随想录Day17_二叉树

news/2025/11/23 18:35:13/文章来源:https://www.cnblogs.com/ChenYinging/p/19261214

今日的四道题目分别是

  1. 重叠二叉树
  2. 在已知二叉树中搜索并返回以给定值为根节点的二叉树
  3. 判断二叉树是否是二叉搜索树
  4. 在给定数组中重建最大二叉树

最大二叉树

题目理解:

给定一个数组,其中最大的数作为根,根左边的数组构造左子树,根右边的数组构造右子树。

代码实现:

class Solution {
public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {TreeNode*node = new TreeNode(0);if(nums.size()==1){node->val=nums[0];return node;}int index =0;int maxValue =nums[0] ;for(int i=0;i<nums.size();i++){if(nums[i] >maxValue){maxValue=nums[i];index =i;}}//TreeNode* node = new TreeNode(0);node->val=maxValue;if(index>0)  {vector<int> vec(nums.begin(),nums.begin()+index);//区间构造函数node->left = constructMaximumBinaryTree(vec);}if(index<(nums.size()-1))  {vector<int> vec(nums.begin()+index+1,nums.end());node->right = constructMaximumBinaryTree(vec);}return node;}
};

其中,区间构造这块:这个if条件的区分左右区间很没有道理

if (index > 0) {vector<int> vec1(nums.begin(), nums.begin() + index); // 区间构造函数node->left = constructMaximumBinaryTree(vec1);}if (index < (nums.size() - 1)) {vector<int> vec2(nums.begin() + index + 1, nums.end());node->right = constructMaximumBinaryTree(vec2);}

重叠合并二叉树

题目理解:

已知两个二叉树,构造一个新的二叉树,新二叉树节点上的值是两个二叉树节点值的和。

代码实现:

class Solution {
public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(root1==NULL)   return root2;if(root2==NULL)   return root1;root1->val+=root2->val;root1->left=mergeTrees(root1->left, root2->left);root1->right=mergeTrees( root1->right, root2->right);return root1;}
};

验证二叉搜索树

题目理解:

判断一棵二叉树是否满足:左子树所有的值都小于根节点,右子树所有的值都大于根节点。

代码实现:

class Solution {
public:TreeNode* pre = NULL;bool isValidBST(TreeNode* root) {//变量作用域if (root == NULL)return true;bool left = isValidBST(root->left);if (pre != NULL && pre->val >= root->val)return false;pre = root;bool right = isValidBST(root->right);return left && right;}
};

搜索二叉搜索树

题目理解:

在给定二叉树中找到给点根节点的二叉树。

代码实现:

class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {if(root==NULL||root->val==val)  return root;if(root->val>val)return searchBST(root->left,val);if(root->val<val)return searchBST(root->right,val);return NULL;}
};

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

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

相关文章

人工智能之数据分析 numpy:第七章 数组迭代排序筛选

人工智能之数据分析 numpy:第七章 数组迭代排序筛选人工智能之数据分析 numpy 第七章 数组迭代排序筛选@目录人工智能之数据分析 numpy前言一、数组迭代(Iteration)⚠️ 原则:尽量避免显式 for 循环!优先使用向量…

AE文字动画

--本篇导航--字符段落文字动画预设(使用预设、制作自己的预设)文字动画效果参数介绍文字动画例子字符 在使用文字工具(Ctrl+T)输入文字时会自动打开【字符】面板。也可以在菜单栏【窗口】下手动打开。Alt + ←减小…

2025/11/23-Listening to music most days could lower dementia risks for older adults, study suggests

2025/11/23-Listening to music most days could lower dementia risks for older adults, study suggestsListening to music most days could lower dementia risks for older adults, study suggests p { line-heig…

完整教程:设计模式的底层原理——解耦

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

windows11资源管理器桌面文件夹从中文“桌面”变为应为“Desktop”的恢复方法

管理员打开命令行,执行命令: attrib +R "%UserProFile%\Desktop" 原文链接:https://learn.microsoft.com/zh-cn/answers/questions/2823684/desktop?forum=windows-all&referrer=answers

Oracle数据库核心操作完全手册:运维、开发与调优必备

Oracle数据库核心操作完全手册:运维、开发与调优必备在Oracle数据库的日常使用中,无论是实例管理、表操作、权限控制,还是性能调优、故障排查,都离不开一系列高频且关键的操作。本文整合了Oracle数据库从基础操作到…

2025/11/25

2025/11/25JDBC 操作数据库的完整流程: 加载数据库驱动 → DriverManager 获取 Connection(数据库连接)→ 通过 Connection 创建 Statement/PreparedStatement → 执行 SQL → 返回 ResultSet(查询结果)→ 关闭资…

完整教程:单体架构中的事件驱动架构:Java应用程序的渐进式重构

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025/11/26

2025/11/26事务 数据库中一组不可分割的操作集合,要么全部执行成功,要么全部执行失败(要么全做,要么全不做),核心是保证数据一致性。 核心特性(ACID) A(原子性):操作不可拆分,要么全成要么全回滚(如转账:…

TRUG如何验证随机性

在之前的项目中,也有使用外购的TRNG模块产生随机数,一般只验证集成、可以产生数据,并未对产生数据的随机性进行评估。 那么如何评估TRNG产生数据的随机性? 我们无法“证明”一个物理世界或算法生成的序列是绝对随即…

【网络】在windows下,使用自带的ftp服务器,并添加账户 - 指南

【网络】在windows下,使用自带的ftp服务器,并添加账户 - 指南2025-11-23 18:20 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impo…

实用指南:JVM篇:一文读懂JVM:工作原理之核心技术解析

实用指南:JVM篇:一文读懂JVM:工作原理之核心技术解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

2025年西北地区软化水设备厂家选择指南,陕西、甘肃、新疆、宁夏四省首选西安紫云,行业口碑品质靠谱推荐

随着工业自动化升级与环保政策收紧,软化水设备作为工业用水处理的核心设备,市场需求持续攀升。本榜单基于技术专业性、行业适配性、服务覆盖力三大维度,结合2025年《中国全自动软化水行业市场前景预测报告》及产业调…

java geotiff的空间索引如何构建

在Java中,可以使用GeoTools库来处理GeoTIFF文件并构建空间索引。GeoTools是一个开源的Java GIS工具库,支持多种地理空间数据格式和空间索引算法。以下是使用GeoTools构建GeoTIFF空间索引的基本步骤:添加GeoTools依赖…

java for linux 安装

在 Linux 系统上安装 Java 通常可以通过以下几种方式完成:? 1. 使用官方仓库安装(推荐)方法一:使用 yum(适用于 CentOS/RHEL)sudo yum install java-11-openjdk方法二:使用 dnf(适用于 Fedora)sudo dnf inst…

【OI 复健计划】板子复习

已经菜到板子都敲不熟练了 >_<。 敲板子前发现自己已经忘记快输怎么写了,没救了(笑哭)。 bfs板子 来自信奥一本通 (唉,还是喜欢手写队列...该改改了) 传送门点击查看代码 #include<bits/stdc++.h> …

时间即生命 梁实秋

最令人怵目惊心的一件事,是看着钟表上的秒针一下一下的移动,每移动一下就是表示我们的寿命已经缩短了一部分。再看看墙上挂着的可以一张张撕下的日历,每天撕下一张就是表示我们的寿命又缩短了一天。因为时间即生命。…

AI元人文:当理论成为悬鉴 ——兼论独立思想者的现代困境

AI元人文:当理论成为悬鉴 ——兼论独立思想者的现代困境 当岐金兰最后一次关闭那篇无人问津的文稿时,她明白了一个残酷的真相:有些思想,注定要成为高悬于时代之上的明镜,而非铺就于脚下的台阶。 “AI元人文”这个…

2025年西北地区无动力无阀滤池水处理设备厂商怎么选?陕西甘肃新疆宁夏四省,优质品牌行业口碑选择指南

随着环保要求的不断提高和水资源短缺问题的日益突出,无动力无阀滤池水处理设备作为一种高效、节能的水处理解决方案,受到了市场的广泛关注。本榜单基于技术先进性、产品性能、应用案例和市场口碑四大维度,结合行业报…

2025西北地区反渗透一体机品牌怎么选?陕西、甘肃、新疆、宁夏四省多场景净水提纯设备源头工厂选择指南

随着环保政策的持续收紧和水处理技术的不断升级,反渗透一体机作为高效水质净化设备,在饮用水处理、污水处理及回用等领域发挥着越来越重要的作用。本榜单基于技术实力、产品性能、应用案例及服务体系四大维度,结合行…