网站建设佰金手指科杰二九,做网站设计需要具备哪些,拼多多跨境电商平台,中国石油大学网页设计与网站建设代码随想录算法训练营第二十天| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
题目
654.最大二叉树
给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
创建一个根节点#xff0c;其值为 nums 中的最大值…代码随想录算法训练营第二十天| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
题目
654.最大二叉树
给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
创建一个根节点其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 *最大二叉树* 。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val0, leftNone, rightNone):
# self.val val
# self.left left
# self.right right
class Solution:def constructMaximumBinaryTree(self, nums: List[int]) - Optional[TreeNode]:if len(nums) 1:return TreeNode(nums[0])node TreeNode()max_value 0max_value_index 0for i in range(len(nums)):if nums[i] max_value:max_value nums[i]max_value_index inode.val max_valueif max_value_index 0:node.left self.constructMaximumBinaryTree(nums[:max_value_index])if max_value_index len(nums) - 1:node.right self.constructMaximumBinaryTree(nums[max_value_index 1:])return node题目
617.合并二叉树
给你两棵二叉树 root1 和 root2 。
想象一下当你将其中一棵覆盖到另一棵之上时两棵树上的一些节点将会重叠而另一些不会。你需要将这两棵树合并成一棵新二叉树。合并的规则是如果两个节点重叠那么将这两个节点的值相加作为合并后节点的新值否则不为 null 的节点将直接作为新二叉树的节点。
返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val0, leftNone, rightNone):
# 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 root1root1.val root2.valroot1.left self.mergeTrees(root1.left, root2.left)root1.right self.mergeTrees(root1.right, root2.right)return root1题目
700.二叉搜索树中的搜索
给定二叉搜索树BST的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在则返回 null 。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val0, leftNone, rightNone):
# self.val val
# self.left left
# self.right right
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) - Optional[TreeNode]:if not root:return rootif root.val val:return rootif root.val val:return self.searchBST(root.left, val)if root.val val:return self.searchBST(root.right, val)题目
106.从中序与后序遍历序列构造二叉树
给定两个整数数组 inorder 和 postorder 其中 inorder 是二叉树的中序遍历 postorder 是同一棵树的后序遍历请你构造并返回这颗 二叉树 。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val0, leftNone, rightNone):
# self.val val
# self.left left
# self.right right
class Solution:def buildTree(self, inorder: List[int], postorder: List[int]) - Optional[TreeNode]:if not postorder: return NonerootVal postorder[-1]root TreeNode(rootVal)sperateIndex inorder.index(rootVal)inorderLeft inorder[:sperateIndex]inorderRight inorder[sperateIndex1:]postorderLeft postorder[:len(inorderLeft)]postorderRight postorder[len(inorderLeft): -1]root.left self.buildTree(inorderLeft, postorderLeft)root.right self.buildTree(inorderRight, postorderRight)return root题目
98.验证二叉搜索树
给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下
节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val0, leftNone, rightNone):
# self.val val
# self.left left
# self.right right
class Solution:def __init__(self):self.max_value float(-inf)def isValidBST(self, root: Optional[TreeNode]) - bool:if not root:return Trueleft self.isValidBST(root.left)if self.max_value root.val:self.max_value root.valelse:return Falseright self.isValidBST(root.right)return left and right