【问题标题】:Given a balanced BST. a min, max, and value, how can you find the largest Xor within min and max?给定一个平衡的 BST。一个最小值、最大值和值,如何在最小值和最大值内找到最大的异或?
【发布时间】:2012-03-20 01:25:13
【问题描述】:

基本上你有一个充满值的 BST。例如。 1-16 一个最小值,最大值和值(10,15,3),您需要找到 BST 中的值与树的最小值和最大值内的给定值之间的最大异或值。

我想知道是否有一种方法可以在不遍历整个树的情况下做到这一点。 如果 min 和 max 不存在,我的方法是。

int xor (Node curent,min,max,value,highestXor){
 1. if node == null return highestXor
 2. check node.value ^ value, if > highestXor replace.
 3. check node.left ^ value and node.right ^ value, nextNode= highest between them 
 4. xor(nextNode,min,max,value,newHighest)
}

基本上一直跟踪产生更高异或值的节点。

我在使用 min 和 max 时遇到的问题是,当我对 node>=min && node

让我解释一下。 采取 BST 1-16 的右侧

      9 
    /   \
  /       \
5           13
           /   \
         11     15
         /\     /\
       10  12 14  16

给定:

  • 分钟 = 10
  • 最大值 = 15
  • 值 = 3

最大异或值为3^12=15

但是,使用我的算法时,当我在第 13 个节点时,我没有将左树带到 11,而是将右树带到 15(因为它试图达到 16,但那超出了范围)。

谁有更好的解决方案?我应该对我的 BST 进行不同的排序吗?我应该使用什么东西而不是 BST 吗?是否可以在不遍历整个值列表的情况下执行此操作?这里的假设是我将拥有一个值列表(我放入 BST 中的值),然后是一个必须应用于值列表的参数列表(最小值、最大值、值)。

【问题讨论】:

    标签: algorithm binary-search-tree avl-tree


    【解决方案1】:

    我的建议是采用类似于this answer to another question的方法:

    https://stackoverflow.com/a/9320467/1015955

    不过,这样做的一个问题是您没有使用所有元素都已插入树中的事实。

    或者,也许,您可以构建一棵树来模拟递归树,而不是二叉树,然后是上述解决方案?只是我的 2 美分 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2020-03-19
      相关资源
      最近更新 更多