diff --git a/README.md b/README.md index 4bd7dc9..812a477 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ func main() { values3 := pq.GetAround(5) // values3 = [, 5, 4] log.Println(values3) - iter := pq.Iterator() // Next 小到大 从root节点起始 + iter := pq.Iterator() // Next 大到小 从root节点起始 // log.Println(iter.Value()) 直接使用会报错, iter.ToHead() log.Println(iter.Value()) // 起始最大值. true 5 diff --git a/priority_queue/vbt.go b/priority_queue/vbt.go index 0808565..62d51bd 100644 --- a/priority_queue/vbt.go +++ b/priority_queue/vbt.go @@ -174,7 +174,7 @@ func (tree *vbTree) removeNode(n *Node) { } if tree.top == n { - tree.top = tree.iter.GetPrev(n, 1) + tree.top = tree.iter.GetNext(n, 1) } ls, rs := getChildrenSize(n) diff --git a/priority_queuekey/priority_queuekey_test.go b/priority_queuekey/priority_queuekey_test.go index 1776d7d..faa8d9f 100644 --- a/priority_queuekey/priority_queuekey_test.go +++ b/priority_queuekey/priority_queuekey_test.go @@ -409,4 +409,5 @@ func TestMain(t *testing.T) { // Prev 大到小 log.Println(iter.Next(), iter.Value()) // true 4 + } diff --git a/priority_queuekey/vbt.go b/priority_queuekey/vbt.go index 45b1c6f..b3caedd 100644 --- a/priority_queuekey/vbt.go +++ b/priority_queuekey/vbt.go @@ -24,6 +24,7 @@ func (n *Node) String() string { return spew.Sprint(n.value) + "(" + p + "|" + spew.Sprint(n.size) + ")" } +// 已经修改过GetNext GetPrev逻辑与avl相反 type vbTree struct { root *Node Compare compare.Compare @@ -118,7 +119,7 @@ func (tree *vbTree) IndexRange(idx1, idx2 int) (result []interface{}, ok bool) { iter := tree.iter result = make([]interface{}, 0, idx1-idx2) for i := idx2; i <= idx1; i++ { - if iter.Next() { + if iter.Prev() { result = append(result, iter.Value()) } else { ok = false @@ -140,7 +141,7 @@ func (tree *vbTree) IndexRange(idx1, idx2 int) (result []interface{}, ok bool) { iter := tree.iter result = make([]interface{}, 0, idx2-idx1) for i := idx1; i <= idx2; i++ { - if iter.Prev() { + if iter.Next() { result = append(result, iter.Value()) } else { ok = false @@ -174,7 +175,7 @@ func (tree *vbTree) removeNode(n *Node) { } if tree.top == n { - tree.top = tree.iter.GetPrev(n, 1) + tree.top = tree.iter.GetNext(n, 1) } ls, rs := getChildrenSize(n) @@ -278,7 +279,7 @@ func (tree *vbTree) GetRange(k1, k2 interface{}) (result []interface{}) { // iter := NewIterator(min) tree.iter.SetNode(min) iter := tree.iter - for iter.Next() { + for iter.Prev() { result = append(result, iter.Value()) if iter.cur == max { break @@ -305,7 +306,7 @@ func (tree *vbTree) GetRange(k1, k2 interface{}) (result []interface{}) { // iter := NewIterator(max) tree.iter.SetNode(max) iter := tree.iter - for iter.Prev() { + for iter.Next() { result = append(result, iter.Value()) if iter.cur == min { break @@ -357,8 +358,8 @@ func (tree *vbTree) getArounNode(key interface{}) (result [3]*Node) { tree.iter.SetNode(n) iter := tree.iter - iter.Prev() - for iter.Prev() { + iter.Next() + for iter.Next() { if tree.Compare(iter.cur.key, n.key) == 0 { n = iter.cur } else { @@ -377,21 +378,21 @@ func (tree *vbTree) getArounNode(key interface{}) (result [3]*Node) { if result[1] != nil { - result[0] = tree.iter.GetPrev(result[1], 1) - result[2] = tree.iter.GetNext(result[1], 1) + result[0] = tree.iter.GetNext(result[1], 1) + result[2] = tree.iter.GetPrev(result[1], 1) } else { result[0] = last - result[2] = tree.iter.GetNext(last, 1) + result[2] = tree.iter.GetPrev(last, 1) } case -1: if result[1] != nil { - result[0] = tree.iter.GetPrev(result[1], 1) - result[2] = tree.iter.GetNext(result[1], 1) + result[0] = tree.iter.GetNext(result[1], 1) + result[2] = tree.iter.GetPrev(result[1], 1) } else { result[2] = last - result[0] = tree.iter.GetPrev(last, 1) + result[0] = tree.iter.GetNext(last, 1) } case 0: @@ -399,8 +400,8 @@ func (tree *vbTree) getArounNode(key interface{}) (result [3]*Node) { if result[1] == nil { return } - result[0] = tree.iter.GetPrev(result[1], 1) - result[2] = tree.iter.GetNext(result[1], 1) + result[0] = tree.iter.GetNext(result[1], 1) + result[2] = tree.iter.GetPrev(result[1], 1) } return } @@ -417,8 +418,8 @@ func (tree *vbTree) GetNode(key interface{}) (*Node, bool) { tree.iter.SetNode(n) iter := tree.iter - iter.Prev() - for iter.Prev() { + iter.Next() + for iter.Next() { if tree.Compare(iter.cur.key, n.key) == 0 { n = iter.cur } else {