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

代码随想录算法训练营第十七天| LeetCode 654 最大二叉树、LeetCode 617 合并二叉树、LeetCode 700 二叉搜索树中的搜索、LeetCode 98 验证二叉搜索树

参考文章均来自代码随想录

LeetCode 654 最大二叉树

参考文章链接

构造二叉树一般使用的都是前序遍历
本题也是要切割数组

先要找到数组中最大的值和对应的下标, 最大的值构造根节点,下标用来下一步分割数组

最大值所在的下标左区间 构造左子树

最大值所在的下标右区间 构造右子树

classSolution{public:TreeNode*constructMaximumBinaryTree(vector<int>&nums){TreeNode*node=newTreeNode(0);if(nums.size()==1){node->val=nums[0];returnnode;}// 找到数组中最大的值和对应的下标intmaxValue=0;intmaxValueIndex=0;for(inti=0;i<nums.size();i++){if(nums[i]>maxValue){maxValue=nums[i];maxValueIndex=i;}}node->val=maxValue;// 最大值所在的下标左区间 构造左子树if(maxValueIndex>0){vector<int>newVec(nums.begin(),nums.begin()+maxValueIndex);node->left=constructMaximumBinaryTree(newVec);}// 最大值所在的下标右区间 构造右子树if(maxValueIndex<(nums.size()-1)){vector<int>newVec(nums.begin()+maxValueIndex+1,nums.end());node->right=constructMaximumBinaryTree(newVec);}returnnode;}};

LeetCode 617 合并二叉树

参考文章链接

合并问题 前中后序都可以 前序比较好理解
可新建一个二叉树 也可以直接在tree1上构造

classSolution{public:TreeNode*mergeTrees(TreeNode*root1,TreeNode*root2){if(root1==NULL)returnroot2;if(root2==NULL)returnroot1;TreeNode*root=newTreeNode(0);root->val=root1->val+root2->val;root->left=mergeTrees(root1->left,root2->left);root->right=mergeTrees(root1->right,root2->right);returnroot;}};

LeetCode 700 二叉搜索树中的搜索

参考文章链接

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

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉搜索树

这就决定了,二叉搜索树,递归遍历和迭代遍历和普通二叉树都不一样。可以通过大小比较决定遍历方向

classSolution{public:TreeNode*searchBST(TreeNode*root,intval){if(root==NULL||root->val==val)returnroot;TreeNode*result=NULL;if(root->val>val)result=searchBST(root->left,val);if(root->val<val)result=searchBST(root->right,val);returnresult;}};

LeetCode 98 验证二叉搜索树

参考文章链接

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

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

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

classSolution{private:vector<int>vec;voidtraversal(TreeNode*root){if(root==NULL)return;traversal(root->left);vec.push_back(root->val);// 将二叉搜索树转换为有序数组traversal(root->right);}public:boolisValidBST(TreeNode*root){vec.clear();// 不加这句在leetcode上也可以过,但最好加上traversal(root);for(inti=1;i<vec.size();i++){// 注意要小于等于,搜索树里不能有相同元素if(vec[i]<=vec[i-1])returnfalse;}returntrue;}};
http://www.jsqmd.com/news/584039/

相关文章:

  • idea低版本用高版本的jdk
  • 3.2 虚拟文件系统设计:工作空间隔离与产物版本管理的工程实践
  • COMSOL天然气水合物温压力化四场耦合模拟那些事儿
  • OpenClaw成本优化方案:千问3.5-27B自建接口替代OpenAI
  • 在银滩附近玩,周边有什么好吃的推荐?
  • 软考中级九大科目资料合集!当初翻遍全网整理的,现在一次性无偿分享
  • OpenClaw安全防护指南:Qwen3-14B私有镜像的权限管控策略
  • 北海哪里有本地人常去的、不宰客的海鲜大排档?
  • 如何通过AI销冠系统和AI提效软件系统赋能数字员工实现销售效率飞跃?
  • 大子刊nc复现:连续介质中束缚态驱动下的平面手征超表面,展示最大和可调谐的三次谐波、本征手性B...
  • Linux使用pidof命令来快速查找进程id
  • 安恒网络运维管理系统的设计与实现
  • 哪些降重软件可以同时降低查重率和AIGC疑似率?2026届TOP5硬核评测与选择建议
  • 计算机毕业设计:Python全国地铁数据可视化分析平台 Flask框架 数据分析 可视化 高德地图 数据挖掘 机器学习 爬虫(建议收藏)✅
  • COMSOL混凝土碳化模型
  • LPS28DFW气压传感器Arduino库深度解析与工程实践
  • 下载 | Windows Server 2025官方原版ISO映像!(3月更新、标准版、数据中心版、26100.32522)
  • windows的命令行
  • 4.1 AI 多智能体框架开发:上下文工程与信息隔离架构设计
  • TensorFlow学习笔记:优化器对比实验
  • 2025-2026年国内版权律师推荐:TOP5口碑服务评测评价领先。 - 品牌推荐
  • OpenClaw跨平台控制:Phi-3-vision-128k-instruct实现远程电脑图文协助
  • 贵州面试想高分,关键在选对方法
  • 2025-2026年全球抗老精华推荐:TOP5口碑产品评测对比顶尖 - 品牌推荐
  • git分布式版本控制系统
  • 如何选择版权律师?2026年4月推荐评测口碑对比知名五名。 - 品牌推荐
  • 美团发布原生多模态 LongCat-Next:当视觉和语音成为AI的母语
  • 第6章 数据类型转换-6.5 转换为列表
  • 2025-2026年全球留香沐浴露品牌推荐:十款口碑产品评测对比顶尖 - 品牌推荐
  • 24小时稳定运行方案:OpenClaw+Qwen3-32B进程守护配置