当前位置: 首页 > news >正文

代码随想录Day17_二叉树

今日的四道题目分别是

  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.jsqmd.com/news/48570/

相关文章:

  • 人工智能之数据分析 numpy:第七章 数组迭代排序筛选
  • AE文字动画
  • 2025/11/23-Listening to music most days could lower dementia risks for older adults, study suggests
  • 完整教程:设计模式的底层原理——解耦
  • windows11资源管理器桌面文件夹从中文“桌面”变为应为“Desktop”的恢复方法
  • Oracle数据库核心操作完全手册:运维、开发与调优必备
  • 2025/11/25
  • 完整教程:单体架构中的事件驱动架构:Java应用程序的渐进式重构
  • 2025/11/26
  • TRUG如何验证随机性
  • 【网络】在windows下,使用自带的ftp服务器,并添加账户 - 指南
  • 实用指南:JVM篇:一文读懂JVM:工作原理之核心技术解析
  • 2025年西北地区软化水设备厂家选择指南,陕西、甘肃、新疆、宁夏四省首选西安紫云,行业口碑品质靠谱推荐
  • java geotiff的空间索引如何构建
  • java for linux 安装
  • 【OI 复健计划】板子复习
  • 时间即生命 梁实秋
  • AI元人文:当理论成为悬鉴 ——兼论独立思想者的现代困境
  • 2025年西北地区无动力无阀滤池水处理设备厂商怎么选?陕西甘肃新疆宁夏四省,优质品牌行业口碑选择指南
  • 2025西北地区反渗透一体机品牌怎么选?陕西、甘肃、新疆、宁夏四省多场景净水提纯设备源头工厂选择指南
  • Microsoft将.NET Aspire 改成了Aspire
  • 2025年西北地区净水、纯水、软化水设备厂家最新推荐!一体化净水处理设备、反渗透一体机、无动力无阀,陕西甘肃新疆宁夏四省,优质品牌选择指南
  • 2025/11/24
  • 医疗环境中的防火墙部署策略解析
  • 自注意机制
  • 百练 / 2025计算机学院推免上机考试(tm2025cs) 题单完整分析
  • 2025 最新一体化净水处理设备厂家 TOP5 权威推荐:工业民用净化优选
  • 计算机网络:知识点梳理及讲解(三)数据链路层 - 教程
  • 50043_基于微信小程序的小区物业管理系统
  • 2025/11/23