修改iterator ToHead ToTail的实现, 和使用方法.
This commit is contained in:
@@ -49,11 +49,13 @@ func TestIteratorHeadTail(t *testing.T) {
|
||||
}
|
||||
|
||||
iter.ToHead()
|
||||
iter.Prev() // or iter.Next
|
||||
if iter.Value() != 1 {
|
||||
t.Error("iter.Value() != ", 14, " value =", iter.Value())
|
||||
}
|
||||
|
||||
iter.ToTail()
|
||||
iter.Next() // or iter.Prev()
|
||||
if iter.Value() != 30 {
|
||||
t.Error("iter.Value() != ", 30, " value =", iter.Value())
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package avl
|
||||
|
||||
import (
|
||||
"github.com/474420502/focus/stack/listarraystack"
|
||||
lastack "github.com/474420502/focus/stack/listarraystack"
|
||||
)
|
||||
|
||||
type Iterator struct {
|
||||
@@ -31,13 +31,36 @@ func NewIteratorWithCap(n *Node, cap int) *Iterator {
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToHead() {
|
||||
for iter.Prev() {
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[0] != nil {
|
||||
iter.cur = iter.cur.children[0]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToTail() {
|
||||
for iter.Next() {
|
||||
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[1] != nil {
|
||||
iter.cur = iter.cur.children[1]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) GetNode() *Node {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package avldup
|
||||
|
||||
import (
|
||||
"github.com/474420502/focus/stack/listarraystack"
|
||||
lastack "github.com/474420502/focus/stack/listarraystack"
|
||||
)
|
||||
|
||||
type Iterator struct {
|
||||
@@ -31,13 +31,36 @@ func NewIteratorWithCap(n *Node, cap int) *Iterator {
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToHead() {
|
||||
for iter.Prev() {
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[0] != nil {
|
||||
iter.cur = iter.cur.children[0]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToTail() {
|
||||
for iter.Next() {
|
||||
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[1] != nil {
|
||||
iter.cur = iter.cur.children[1]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) GetNode() *Node {
|
||||
|
||||
@@ -31,13 +31,36 @@ func NewIteratorWithCap(n *Node, cap int) *Iterator {
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToHead() {
|
||||
for iter.Prev() {
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[0] != nil {
|
||||
iter.cur = iter.cur.children[0]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToTail() {
|
||||
for iter.Next() {
|
||||
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[1] != nil {
|
||||
iter.cur = iter.cur.children[1]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) GetNode() *Node {
|
||||
|
||||
@@ -31,13 +31,36 @@ func NewIteratorWithCap(n *Node, cap int) *Iterator {
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToHead() {
|
||||
for iter.Prev() {
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[0] != nil {
|
||||
iter.cur = iter.cur.children[0]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToTail() {
|
||||
for iter.Next() {
|
||||
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[1] != nil {
|
||||
iter.cur = iter.cur.children[1]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) GetNode() *Node {
|
||||
|
||||
@@ -31,13 +31,36 @@ func NewIteratorWithCap(n *Node, cap int) *Iterator {
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToHead() {
|
||||
for iter.Prev() {
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[0] != nil {
|
||||
iter.cur = iter.cur.children[0]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToTail() {
|
||||
for iter.Next() {
|
||||
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[1] != nil {
|
||||
iter.cur = iter.cur.children[1]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) GetNode() *Node {
|
||||
|
||||
@@ -47,6 +47,7 @@ func (iter *Iterator) ToHead() {
|
||||
iter.cur = iter.cur.children[0]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToTail() {
|
||||
@@ -63,6 +64,7 @@ func (iter *Iterator) ToTail() {
|
||||
iter.cur = iter.cur.children[1]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) SetNode(n *Node) {
|
||||
|
||||
@@ -34,12 +34,13 @@ func TestIteratorHeadTail(t *testing.T) {
|
||||
|
||||
iter := tree.Iterator()
|
||||
iter.ToHead() // 从小到大
|
||||
iter.Next()
|
||||
if iter.Value() != 1 {
|
||||
t.Error("value error", iter.Value())
|
||||
}
|
||||
|
||||
iter.ToTail()
|
||||
|
||||
iter.Prev()
|
||||
if iter.Value() != 100 {
|
||||
t.Error("value error", iter.Value())
|
||||
}
|
||||
@@ -57,6 +58,7 @@ func TestIteratorHeadTail(t *testing.T) {
|
||||
|
||||
iter = tree.Iterator()
|
||||
iter.ToTail()
|
||||
iter.Prev()
|
||||
if iter.Value() != result[0] {
|
||||
t.Error("ToTail error", result, iter.Value())
|
||||
}
|
||||
@@ -64,6 +66,7 @@ func TestIteratorHeadTail(t *testing.T) {
|
||||
result = tree.GetAround(-1)
|
||||
|
||||
iter.ToHead()
|
||||
iter.Next()
|
||||
if iter.Value() != result[2] {
|
||||
t.Error("ToTail error", result, iter.Value())
|
||||
}
|
||||
|
||||
@@ -35,13 +35,36 @@ func (iter *Iterator) GetNode() *Node {
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToHead() {
|
||||
for iter.Prev() {
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[0] != nil {
|
||||
iter.cur = iter.cur.children[0]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) ToTail() {
|
||||
for iter.Next() {
|
||||
|
||||
if iter.cur == nil {
|
||||
iter.cur = iter.up
|
||||
}
|
||||
|
||||
for iter.cur.parent != nil {
|
||||
iter.cur = iter.cur.parent
|
||||
}
|
||||
|
||||
for iter.cur.children[1] != nil {
|
||||
iter.cur = iter.cur.children[1]
|
||||
}
|
||||
iter.SetNode(iter.cur)
|
||||
iter.cur = nil
|
||||
}
|
||||
|
||||
func (iter *Iterator) SetNode(n *Node) {
|
||||
|
||||
Reference in New Issue
Block a user