2015-03-06 16:10:34 +00:00
|
|
|
/*
|
|
|
|
Copyright (c) 2015, Emir Pasic
|
|
|
|
All rights reserved.
|
|
|
|
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
|
|
modification, are permitted provided that the following conditions are met:
|
|
|
|
|
|
|
|
* Redistributions of source code must retain the above copyright notice, this
|
|
|
|
list of conditions and the following disclaimer.
|
|
|
|
|
|
|
|
* Redistributions in binary form must reproduce the above copyright notice,
|
|
|
|
this list of conditions and the following disclaimer in the documentation
|
|
|
|
and/or other materials provided with the distribution.
|
|
|
|
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
|
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
|
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
|
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
|
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
2015-03-05 23:43:33 +00:00
|
|
|
package examples
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
rbt "github.com/emirpasic/gods/trees/redblacktree"
|
|
|
|
)
|
|
|
|
|
2016-03-23 05:22:23 +00:00
|
|
|
func RedBlackTreeExample() {
|
2015-03-05 23:43:33 +00:00
|
|
|
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
|
2016-03-23 05:22:23 +00:00
|
|
|
// │ ┌── 5
|
|
|
|
// │ ┌── 4
|
|
|
|
// │ │ └── 3
|
|
|
|
// └── 2
|
|
|
|
// └── 1
|
2015-03-05 23:43:33 +00:00
|
|
|
|
|
|
|
_ = 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
|
|
|
|
}
|