基本上你有一個充滿價值的BST。例如。 1-16 a min,max和value(10,15,3),您需要找到BST中的值和樹中最小值和最大值內的給定值之間的最大異或值。給定均衡的BST。最小值,最大值和最大值,如何找到最小值和最大值內最大的異或值?
我想知道是否有辦法做到這一點,而無需遍歷整個樹。 如果最小和最大不存在,我的方法是。
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)
}
基本上繼續跟隨產生更高異或值的節點。
問題我正在與最小值和最大值,當我把支票節點> =分鐘& &節點< =最大的樹將穿越很好,但是當我在範圍之內來的,這是可能的我可能會把一個壞分支帶到範圍之外的數字。
讓我解釋一下。 以一個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中),然後列出一些參數(最小值,最大值,值),我必須應用到值列表中。