Algorithm 增强minDiff的红黑树

Algorithm 增强minDiff的红黑树,algorithm,binary-search-tree,red-black-tree,Algorithm,Binary Search Tree,Red Black Tree,所以我有以下问题: 你有一组数字,S,存储在一棵红黑的树上。您试图将minDiff添加到红黑树中,该树给出S中两个最接近的数字之间的绝对差。例如,如果S={1,18,23,62,79,100},minDiff将返回5(| 23-18 |) A) 演示如何扩充红黑树以有效支持此操作,同时保持插入、搜索和删除的O(lgn)运行时间 B) 演示如何输出创建MinDiff的两个数字的值。对于上面的示例,您将输出23和18 我的困惑: 我停留在问题的最开始部分,即增加什么。我可以想到一些简单而低效的解决方

所以我有以下问题:

你有一组数字,S,存储在一棵红黑的树上。您试图将minDiff添加到红黑树中,该树给出S中两个最接近的数字之间的绝对差。例如,如果S={1,18,23,62,79,100},minDiff将返回5(| 23-18 |)

A) 演示如何扩充红黑树以有效支持此操作,同时保持插入、搜索和删除的O(lgn)运行时间

B) 演示如何输出创建MinDiff的两个数字的值。对于上面的示例,您将输出23和18

我的困惑:

我停留在问题的最开始部分,即增加什么。我可以想到一些简单而低效的解决方案,比如让每个节点保持自身和其父节点之间的绝对差异。然而,似乎应该有一些优雅的解决方案,不需要查看树的每个值来确定解决方案


我希望我能展示更多我的作品,但我完全被难住了,不知道从哪里开始

添加到树中的信息必须满足2个要求:

  • 它必须让你快速计算minDiff;及
  • 您必须能够根据其二个子项中的信息重新计算父项信息。这使您能够快速修复受插入、删除和重新平衡操作影响的任何节点中的信息
  • 马上想到的答案是,在树中的每个节点的子树中的节点之间增加minDiff,并在子树中增加最小值和最大值

    node.minVal = node.left ? node.left.minVal : node.val
    node.maxVal = node.right ? node.right.maxVal : node.val
    node.minDiff = min(
        node.left.minDiff,
        node.right.minDiff,
        node.val - node.left.maxVal,
        node.right.minVal - node.Val
        )