📅  最后修改于: 2023-12-03 14:51:23.102000             🧑  作者: Mango
要在二叉树中查找最大和最小元素,通常的做法是使用递归,堆栈或队列等数据结构。但是,在不使用这些数据结构的情况下,我们还可以使用哪些方法呢?
观察二叉树的结构,我们可以知道一个节点的左子树都比它小,右子树都比它大。因此,要查找最大值,我们只需要一直向右子树遍历,直到找到最右边的节点;要查找最小值,我们只需要一直向左子树遍历,直到找到最左边的节点。因此,我们不需要使用递归,堆栈或队列等数据结构,只需要一个指针即可完成操作。
以下代码演示了如何在不使用递归,堆栈或队列的情况下,在二叉树中查找最大和最小元素。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def find_min(root: TreeNode) -> int:
while root.left:
root = root.left
return root.val
def find_max(root: TreeNode) -> int:
while root.right:
root = root.right
return root.val
测试数据如下:
4
/ \
2 6
/ \ / \
1 3 5 7
我们可以验证一下程序是否正确:
root = TreeNode(4)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.left.left = TreeNode(1)
root.left.right = TreeNode(3)
root.right.left = TreeNode(5)
root.right.right = TreeNode(7)
assert find_min(root) == 1
assert find_max(root) == 7
程序输出的结果符合我们的预期,因此我们可以认为该程序是正确的。