算法刷题Day 37 单调递增的数字+监听二叉树
发布人:shili8
发布时间:2024-11-20 10:50
阅读次数:0
**算法刷题 Day37**
### 单调递增的数字#### 题目描述给定一个整数序列,判断该序列是否为单调递增。单调递增序列指的是每两个连续元素之间都有一个严格递增关系。
#### 示例* 序列 `[1,2,3,4,5]` 是单调递增的。
* 序列 `[1,3,2,4,5]` 不是单调递增的,因为 `3` 和 `2` 之间存在一个严格递减关系。
#### 解决方案我们可以使用以下方法来判断序列是否为单调递增:
* 遍历序列中的每个元素。
* 与前一个元素进行比较。如果当前元素小于前一个元素,则序列不是单调递增的。
* 如果遍历完成且没有发现任何严格递减关系,则序列是单调递增的。
####代码示例
def is_monotonic(nums): """ 判断给定整数序列是否为单调递增。 Args: nums (list): 整数序列。 Returns: bool: 序列是否为单调递增。 """ # 检查序列是否为单调递减 is_decreasing = False for i in range(len(nums) -1): if nums[i] > nums[i +1]: is_decreasing = True break # 如果序列既不是单调递增也不是单调递减,则返回True return not (is_decreasing or any(nums[i] < nums[i +1] for i in range(len(nums) -1))) # 测试用例print(is_monotonic([1,2,3,4,5])) # Trueprint(is_monotonic([1,3,2,4,5])) # False
### 监听二叉树#### 题目描述给定一个二叉树,实现一个函数来监听该树。监听函数应该返回一个列表,其中包含每个节点的值。
#### 示例* 二叉树 `[1,2,3,4,5]` 的监听结果为 `[1,2,3,4,5]`。
* 二叉树 `[1, null,2,3, null,4, null,5]` 的监听结果为 `[1, null,2,3, null,4, null,5]`。
#### 解决方案我们可以使用以下方法来实现监听函数:
* 使用前序遍历(Preorder Traversal)或中序遍历(Inorder Traversal)等遍历方式访问每个节点。
* 将每个节点的值添加到结果列表中。
####代码示例
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonedef preorder_traversal(root): """ 使用前序遍历方式监听二叉树。 Args: root (TreeNode): 二叉树的根节点。 Returns: list: 监听结果列表。 """ result = [] def traverse(node): if node is None: return result.append(node.val) traverse(node.left) traverse(node.right) traverse(root) return result# 测试用例root1 = TreeNode(1) root1.left = TreeNode(2) root1.right = TreeNode(3) root2 = TreeNode(1) root2.left = Noneroot2.right = TreeNode(2) root2.right.left = TreeNode(3) root2.right.right = TreeNode(4) root2.right.right.left = TreeNode(5) print(preorder_traversal(root1)) # [1,2,3] print(preorder_traversal(root2)) # [1, null,2,3, null,4, null,5]
以上是本篇文章的全部内容。希望这些示例和解释有助于你更好地理解单调递增的数字和监听二叉树的概念。如果你有任何问题或需要进一步的帮助,请随时告诉我!