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

算法第十七天|654. 最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

654. 最大二叉树

题目

在这里插入图片描述

思路与解法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:if not nums:return Nonemax_val = max(nums)max_idx = nums.index(max_val)root = TreeNode(max_val)root.left = self.constructMaximumBinaryTree(nums[:max_idx])root.right = self.constructMaximumBinaryTree(nums[max_idx+1:])return root

617.合并二叉树

题目

在这里插入图片描述

思路与解法

第一想法: 通过层序遍历来合并
一遍过,哈哈,虽然肯定有可以优化的地方

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if not root1:return root2if not root2:return root1from collections import dequequeue1 = deque()queue2 = deque()queue1.append(root1)queue2.append(root2)while queue1 or queue2:cur1 = queue1.popleft()cur2 = queue2.popleft()cur_new_val = cur1.val + cur2.valcur1.val = cur_new_valif not cur1.left and cur2.left:cur1.left = TreeNode(0)elif cur1.left and not cur2.left:cur2.left = TreeNode(0)if not cur1.right and cur2.right:cur1.right = TreeNode(0)elif cur1.right and not cur2.right:cur2.right = TreeNode(0)if cur1.left:queue1.append(cur1.left)queue2.append(cur2.left)if cur1.right:queue1.append(cur1.right)queue2.append(cur2.right)return root1

700.二叉搜索树中的搜索

题目

在这里插入图片描述

思路与解法

第一想法:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:val_node = self.find_root(root, val)return val_nodedef find_root(self, node, val):if not node:return Noneif node.val == val:return nodeelif node.val > val:return self.find_root(node.left, val)elif node.val < val:return self.find_root(node.right, val)

98.验证二叉搜索树

题目

在这里插入图片描述

思路与解法

第一想法: 判断每个结点作为root结点构成的子树是不是二叉搜索树,如下。但是有坑,光判断每个子数是不够的,因为子树中结点可能不满足子树外的条件

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isValidBST(self, root: Optional[TreeNode]) -> bool:if not root:return Trueif root.left and root.left.val >= root.val:return Falseif root.right and root.right.val <= root.val:return Falsereturn self.isValidBST(root.left) and self.isValidBST(root.right)

如下就不满足条件,
在这里插入图片描述

思考后的想法: 中序遍历后,挨个判断是不是递增的。发现carl也是这么做的,只是他有几种方法。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isValidBST(self, root: Optional[TreeNode]) -> bool:self.nodes = []self.traversal(root)for i in range(len(self.nodes)-1):if self.nodes[i] >= self.nodes[i+1]:return Falsereturn Truedef traversal(self, root):if not root:return Noneself.traversal(root.left)self.nodes.append(root.val)self.traversal(root.right)

相关文章:

  • 第十六章 常用存储器介绍
  • 手机相册的 “智能分类” 功能
  • 数学复习笔记 7
  • Playwright 安装配置文件详解
  • Spark缓存-cache
  • 数据擦除标准:1-Pass vs. 3-Pass vs. 7-Pass有什么区别,哪个更好?
  • 【MySQL】第三弹——表的CRUD进阶(一)数据库约束
  • 专栏特辑丨悬镜浅谈开源风险治理之SBOM与SCA
  • 鸿蒙Next开发 获取APP缓存大小和清除缓存
  • Open Source Geospatial Content Management System -GeoNode
  • 《100天精通Python——基础篇 2025 第18天:正则表达式入门实战,解锁字符串处理的魔法力量》
  • Leetcode 3547. Maximum Sum of Edge Values in a Graph
  • Excelize 开源基础库发布 2.9.1 版本更新
  • win部署Jenkins 自动化部署发布后端项目
  • 6. 多列布局/用户界面 - 杂志风格文章布局
  • RabbitMQ 核心概念与消息模型深度解析(一)
  • centos中libc.so.6No such file的解决方式
  • 尼康VR镜头防抖模式NORMAL和ACTIVE的区别(私人笔记)
  • 专栏项目框架介绍
  • wpf DataGrid 行选择 命令绑定
  • 泽连斯基:将带领乌代表团前往土耳其,已准备好与普京会谈
  • 夜读|尊重生命的棱角
  • 郑培凯:汤显祖的“至情”与罗汝芳的“赤子之心”
  • 中国创面修复学科发起者之一陆树良教授病逝,享年64岁
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话
  • 北京“准80后”干部兰天跨省份调任新疆生态环境厅副厅长