做网站的图片大小是多少,系统开发策略主要有,wordpress评论选择头像,介绍网站建设规划书结构20
654. 最大二叉树
给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
创建一个根节点#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 n…20
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]:def tranversal(left_index: int, right_index: int) - TreeNode:#1.寻找构建数组的最大值以及对应的索引不变量左闭右开#2.递归#3.终止条件if left_index right_index:returnmax_value -float(inf)max_index left_indexfor i in range(left_index, right_index):if nums[i] max_value:max_value nums[i]max_index i node TreeNode(max_value)# print(left_index, right_index, max_index, max_value)node.left tranversal(left_index, max_index)node.right tranversal(max_index 1, right_index)return nodereturn tranversal(0, len(nums))
还有单调栈的实现后续可以看下
617. 合并二叉树
给你两棵二叉树 root1 和 root2 。
想象一下当你将其中一棵覆盖到另一棵之上时两棵树上的一些节点将会重叠而另一些不会。你需要将这两棵树合并成一棵新二叉树。合并的规则是如果两个节点重叠那么将这两个节点的值相加作为合并后节点的新值否则不为 null 的节点将直接作为新二叉树的节点。
返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。
经典递归咯
代码实现
class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) - Optional[TreeNode]:if not root1 and not root2:returnif not root1:return root2if not root2:return root1new_root TreeNode(root1.val root2.val)new_root.left self.mergeTrees(root1.left, root2.left)new_root.right self.mergeTrees(root1.right, root2.right)return new_root700. 二叉搜索树中的搜索
给定二叉搜索树BST的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在则返回 null
代码实现
递归
# self.right right
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) - Optional[TreeNode]:#明确二叉搜索树的定义左小右大 中序遍历为升序排列if not root or root.val val:return rootif val root.val:return self.searchBST(root.right, val)if val root.val:return self.searchBST(root.left, val)迭代
# 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 or root.val val:# return root# if val root.val:# return self.searchBST(root.right, val)# if val root.val:# return self.searchBST(root.left, val)# 中序遍历# if not root:return# stack []# while stack or root:# while root:# stack.append(root)# root root.left# root stack.pop()# if root.val val:# return root # root root.right# return rootwhile root:if root.val val:root root.leftelif root.val val:root root.rightelse:return rootreturn 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:max_value -float(inf)def isValidBST(self, root: Optional[TreeNode]) - bool:#中序遍历维护一个最大值的变量遍历的时候判断root.val和max_value的daxiaoif not root:return Trueleft self.isValidBST(root.left)if not left or root.val self.max_value:return Falseself.max_value root.valright self.isValidBST(root.right)return right