func RedBlackTreeExtendedExample() { tree := RedBlackTreeExtended{rbt.NewWithIntComparator()} tree.Put(1, "a") // 1->x (in order) tree.Put(2, "b") // 1->x, 2->b (in order) tree.Put(3, "c") // 1->x, 2->b, 3->c (in order) tree.Put(4, "d") // 1->x, 2->b, 3->c, 4->d (in order) tree.Put(5, "e") // 1->x, 2->b, 3->c, 4->d, 5->e (in order) print(&tree) // Value for max key: e // Value for min key: a // RedBlackTree // │ ┌── 5 // │ ┌── 4 // │ │ └── 3 // └── 2 // └── 1 tree.RemoveMin() // 2->b, 3->c, 4->d, 5->e (in order) tree.RemoveMax() // 2->b, 3->c, 4->d (in order) tree.RemoveMin() // 3->c, 4->d (in order) tree.RemoveMax() // 3->c (in order) print(&tree) // Value for max key: c // Value for min key: c // RedBlackTree // └── 3 // Ceiling and Floor functions tree = RedBlackTreeExtended{rbt.NewWithIntComparator()} tree.Put(1, "a") tree.Put(2, "b") tree.Put(4, "d") tree.Put(6, "f") tree.Put(7, "g") //index, ceiling, floor testValues := [][]interface{}{ {0, 1, nil}, {1, 1, 1}, {2, 2, 2}, {3, 4, 2}, {4, 4, 4}, {5, 6, 4}, {6, 6, 6}, {7, 7, 7}, {8, nil, 7}, } for _, tt := range testValues { actualCeiling, _ := tree.Ceiling(tt[0]) actualFloor, _ := tree.Floor(tt[0]) fmt.Printf("test key %d, expected (%d, %d), actual (%d, %d)\n", tt[0], tt[1], tt[2], actualCeiling.Key, actualFloor.Key) } }
// RedBlackTreeExtendedExample main method on how to use the custom red-black tree above func RedBlackTreeExtendedExample() { tree := RedBlackTreeExtended{rbt.NewWithIntComparator()} tree.Put(1, "a") // 1->x (in order) tree.Put(2, "b") // 1->x, 2->b (in order) tree.Put(3, "c") // 1->x, 2->b, 3->c (in order) tree.Put(4, "d") // 1->x, 2->b, 3->c, 4->d (in order) tree.Put(5, "e") // 1->x, 2->b, 3->c, 4->d, 5->e (in order) print(&tree) // Value for max key: e // Value for min key: a // RedBlackTree // │ ┌── 5 // │ ┌── 4 // │ │ └── 3 // └── 2 // └── 1 tree.RemoveMin() // 2->b, 3->c, 4->d, 5->e (in order) tree.RemoveMax() // 2->b, 3->c, 4->d (in order) tree.RemoveMin() // 3->c, 4->d (in order) tree.RemoveMax() // 3->c (in order) print(&tree) // Value for max key: c // Value for min key: c // RedBlackTree // └── 3 }
// RedBlackTreeExample to demonstrate basic usage of RedBlackTree func RedBlackTreeExample() { tree := rbt.NewWithIntComparator() // empty(keys are of type int) tree.Put(1, "x") // 1->x tree.Put(2, "b") // 1->x, 2->b (in order) tree.Put(1, "a") // 1->a, 2->b (in order, replacement) tree.Put(3, "c") // 1->a, 2->b, 3->c (in order) tree.Put(4, "d") // 1->a, 2->b, 3->c, 4->d (in order) tree.Put(5, "e") // 1->a, 2->b, 3->c, 4->d, 5->e (in order) tree.Put(6, "f") // 1->a, 2->b, 3->c, 4->d, 5->e, 6->f (in order) fmt.Println(tree) // // RedBlackTree // │ ┌── 6 // │ ┌── 5 // │ ┌── 4 // │ │ └── 3 // └── 2 // └── 1 _ = tree.Values() // []interface {}{"a", "b", "c", "d", "e", "f"} (in order) _ = tree.Keys() // []interface {}{1, 2, 3, 4, 5, 6} (in order) tree.Remove(2) // 1->a, 3->c, 4->d, 5->e, 6->f (in order) fmt.Println(tree) // // RedBlackTree // │ ┌── 6 // │ ┌── 5 // └── 4 // │ ┌── 3 // └── 1 tree.Clear() // empty tree.Empty() // true tree.Size() // 0 }
// NewWithIntComparator instantiates a tree map with the IntComparator, i.e. keys are of type int. func NewWithIntComparator() *Map { return &Map{tree: rbt.NewWithIntComparator()} }
// NewWithIntComparator instantiates a new empty set with the IntComparator, i.e. keys are of type int. func NewWithIntComparator() *Set { return &Set{tree: rbt.NewWithIntComparator()} }