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

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

654.最大二叉树

和构造二叉树差不多,本题使用索引的方式

class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:return self.traversal(nums, 0, len(nums)-1)def traversal(self, nums, left, right):if left > right:returnmax_value_index = leftfor index in range(left+1, right+1):if nums[index] > nums[max_value_index]:max_value_index = indexroot = TreeNode(nums[max_value_index])root.left = self.traversal(nums, left, max_value_index-1)root.right = self.traversal(nums, max_value_index+1, right)return root      

617.合并二叉树

最后合成的树放在root1上

class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if not root1:return root2if not root2:return root1root1.val = root1.val + root2.valroot1.left = self.mergeTrees(root1.left, root2.left)root1.right = self.mergeTrees(root1.right, root2.right)return root1

700.二叉搜索树中的搜索

搜索二叉树左子树的值都比根节点小,右子树的值都是根节点大,利用这个特性将大大提高搜索效率

递归法

class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:if not root:returnif root.val == val:return rootif root.val > val:return self.searchBST(root.left, val)if root.val < val:return self.searchBST(root.right, val)

迭代法

class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:while root:if root.val == val:return rootelif root.val > val:root = root.leftelse:root = root.rightreturn

98.验证二叉搜索树

此题不能单纯比较根节点大于左节点小于右节点,因为二叉搜索树需要左子树所有的节点都小于根节点,右子树所有的节点都大于根节点

本题使用中序遍历,如果是二叉搜索树的话,可以得到递增序列。因此在中序遍历中比较当前值是否大于前一个值,如果不满足,则返回False

class Solution:def __init__(self):self.pre = Nonedef isValidBST(self, root: Optional[TreeNode]) -> bool:if not root:return Trueleft = self.isValidBST(root.left)if self.pre is not None and root.val <= self.pre:return Falseself.pre = root.valright = self.isValidBST(root.right)return left and right

注意:本题中if self.pre is not None 不能替换为if self.pre,因为pre为0的时候,if self.pre 是False

http://www.lryc.cn/news/347826.html

相关文章:

  • 企业信息防泄漏软件分析:盘点常用企业信息防泄漏软件
  • Rancher-Kubewarden-保姆级教学-含Demo测试
  • Lumerical Script ------ array 数组类型 和 matrix 矩阵类型
  • Springboot自动装配源码分析
  • Visual Transformer (ViT)模型详解 动图讲解
  • C++:完美转发(一)(std::forward)
  • 西部首个全域直播基地,打造西部直播基地领军形象
  • 钟表——蓝桥杯十三届2022国赛大学B组真题
  • CSS 之 圆形波浪进度条效果
  • 按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移;js鼠标拖拽 (鼠标按下事件:onmousedown、鼠标移动事件:onmousemove、鼠标抬起事件:onmouseup)
  • 第十二章 项目采购管理
  • PSFR-GAN复现
  • 函数和数组
  • docker安装时报错:Error: Nothing to do
  • 白盒测试:覆盖测试及测试用例设计
  • Java高级开发2024高频面试提问题目
  • Kamailio openssl 3.0.x 需要注意的事项
  • SpringAMQP Work Queue 工作队列
  • 一分钟带你了解什么是等保测评
  • 宝塔面板怎么解决nginx跨域问题
  • Python 自动化脚本系列:第1集
  • 基于PHP开发的图片高清无损在线压缩源码系统 带完整源代码以及搭建教程
  • Linux提权--SUDO(CVE-2021-3156)Polkit(CVE-2021-4034)
  • nodejs里面的 http 模块介绍和使用
  • MVC框架简易实现【精细】
  • Java入门基础学习笔记18——赋值运算符
  • csv 可视化 python代码
  • HashMap 和 Hashtable区别的底层原理
  • 代码随想录35期Day32-Java
  • ROS 2边学边练(45)-- 构建一个能动的机器人模型