📌  相关文章
📜  BST中最大小于或等于N的数字(迭代方法)(1)

📅  最后修改于: 2023-12-03 14:59:35.046000             🧑  作者: Mango

BST中最大小于或等于N的数字(迭代方法)

二叉搜索树(Binary Search Tree,BST)是一种基于二叉树的数据结构,它具有以下性质:

  1. 节点的左子树中所有节点的值均小于该节点的值
  2. 节点的右子树中所有节点的值均大于该节点的值
  3. 左右子树也分别为二叉搜索树

因此,二叉搜索树能够快速地找到一个值,或者找到一个范围内的所有值。本篇文章将介绍如何在一个BST中找到最大小于或等于一个给定值的数字,以及如何使用迭代方法实现。

解题思路

根据二叉搜索树的性质,我们可以采用以下策略:

  1. 从根节点开始遍历二叉搜索树
  2. 如果当前节点的值等于给定的值N,那么直接返回该节点的值
  3. 如果当前节点的值大于给定的值N,那么应当继续在当前节点的左子树中寻找更小的值
  4. 如果当前节点的值小于给定的值N,那么应当继续在当前节点的右子树中寻找更小的值
  5. 如果当前节点的左子树或右子树为空,那么当前节点即为所求
代码实现

下面是使用python实现的迭代方法代码片段:

def findClosestValueInBst(tree, target):
    closest = float("inf")
    while tree is not None:
        if abs(target - closest) > abs(target - tree.value):
            closest = tree.value
        if target < tree.value:
            tree = tree.left
        elif target > tree.value:
            tree = tree.right
        else:
            break
    return closest
代码解析

我们首先初始化closest变量为正无穷,用于保存当前已经找到的最接近给定值的数。然后进入一个while循环,不断遍历二叉搜索树:

  1. 如果当前节点的值更接近给定的值N,那么就将closest变量赋值为当前节点的值
  2. 如果当前节点的值大于给定的值N,那么继续在左子树中寻找更接近给定值的数
  3. 如果当前节点的值小于给定的值N,那么继续在右子树中寻找更接近给定值的数
  4. 如果找到了和给定值相等的节点,那么直接break循环

最后返回closest变量即为所求。

总结

本篇文章介绍了如何在一个BST中找到最大小于或等于一个给定值的数字,以及如何使用迭代方法实现。在实现迭代方法时,关键是掌握二叉搜索树的性质,以及如何根据这些性质进行有针对性的遍历。