📜  在不使用递归,堆栈或队列的情况下,在二叉树中查找最大和最小元素(1)

📅  最后修改于: 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

程序输出的结果符合我们的预期,因此我们可以认为该程序是正确的。