mirror of
https://github.com/duke-git/lancet.git
synced 2025-10-21 22:49:28 +08:00
157 lines
3.1 KiB
Go
157 lines
3.1 KiB
Go
package datastructure
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/duke-git/lancet/v2/internal"
|
|
)
|
|
|
|
type intComparator struct{}
|
|
|
|
func (c *intComparator) Compare(v1, v2 any) int {
|
|
val1, _ := v1.(int)
|
|
val2, _ := v2.(int)
|
|
|
|
if val1 < val2 {
|
|
return -1
|
|
} else if val1 > val2 {
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func TestBSTree_InsertNode(t *testing.T) {
|
|
bstree := NewBSTree(6, &intComparator{})
|
|
|
|
bstree.InsertNode(7)
|
|
bstree.InsertNode(5)
|
|
bstree.InsertNode(2)
|
|
bstree.InsertNode(4)
|
|
|
|
bstree.Print()
|
|
}
|
|
|
|
func TestBSTree_PreOrderTraverse(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestBSTree_PreOrderTraverse")
|
|
|
|
bstree := NewBSTree(6, &intComparator{})
|
|
|
|
bstree.InsertNode(7)
|
|
bstree.InsertNode(5)
|
|
bstree.InsertNode(2)
|
|
bstree.InsertNode(4)
|
|
|
|
acturl := bstree.PreOrderTraverse()
|
|
t.Log(acturl)
|
|
assert.Equal([]int{6, 5, 2, 4, 7}, acturl)
|
|
}
|
|
|
|
func TestBSTree_PostOrderTraverse(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestBSTree_PostOrderTraverse")
|
|
|
|
bstree := NewBSTree(6, &intComparator{})
|
|
|
|
bstree.InsertNode(7)
|
|
bstree.InsertNode(5)
|
|
bstree.InsertNode(2)
|
|
bstree.InsertNode(4)
|
|
|
|
acturl := bstree.PostOrderTraverse()
|
|
t.Log(acturl)
|
|
assert.Equal([]int{5, 2, 4, 7, 6}, acturl)
|
|
}
|
|
|
|
func TestBSTree_InOrderTraverse(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestBSTree_InOrderTraverse")
|
|
|
|
bstree := NewBSTree(6, &intComparator{})
|
|
|
|
bstree.InsertNode(7)
|
|
bstree.InsertNode(5)
|
|
bstree.InsertNode(2)
|
|
bstree.InsertNode(4)
|
|
|
|
acturl := bstree.InOrderTraverse()
|
|
t.Log(acturl)
|
|
assert.Equal([]int{2, 4, 5, 6, 7}, acturl)
|
|
}
|
|
|
|
func TestBSTree_LevelOrderTraverse(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestBSTree_LevelOrderTraverse")
|
|
|
|
bstree := NewBSTree(6, &intComparator{})
|
|
|
|
bstree.InsertNode(7)
|
|
bstree.InsertNode(5)
|
|
bstree.InsertNode(2)
|
|
bstree.InsertNode(4)
|
|
|
|
bstree.Print()
|
|
|
|
acturl := bstree.LevelOrderTraverse()
|
|
t.Log(acturl)
|
|
assert.Equal([]int{6, 5, 7, 2, 4}, acturl)
|
|
}
|
|
|
|
func TestBSTree_DeletetNode(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestBSTree_DeletetNode")
|
|
|
|
bstree := NewBSTree(6, &intComparator{})
|
|
|
|
bstree.InsertNode(7)
|
|
bstree.InsertNode(5)
|
|
bstree.InsertNode(2)
|
|
bstree.InsertNode(4)
|
|
|
|
bstree.Print()
|
|
|
|
bstree.DeletetNode(4)
|
|
bstree.Print()
|
|
acturl1 := bstree.InOrderTraverse()
|
|
t.Log(acturl1)
|
|
assert.Equal([]int{2, 5, 6, 7}, acturl1)
|
|
|
|
//todo
|
|
// bstree.DeletetNode(6, comparator)
|
|
// bstree.Print()
|
|
// acturl2 := bstree.InOrderTraverse()
|
|
// t.Log(acturl2)
|
|
// assert.Equal([]int{2, 5, 7}, acturl2)
|
|
}
|
|
|
|
func TestBSTree_Depth(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestBSTree_Depth")
|
|
|
|
bstree := NewBSTree(6, &intComparator{})
|
|
|
|
bstree.InsertNode(7)
|
|
bstree.InsertNode(5)
|
|
bstree.InsertNode(2)
|
|
bstree.InsertNode(4)
|
|
|
|
bstree.Print()
|
|
|
|
assert.Equal(bstree.Depth(), 4)
|
|
}
|
|
|
|
|
|
func TestBSTree_IsSubTree(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestBSTree_IsSubTree")
|
|
|
|
superTree := NewBSTree(6, &intComparator{})
|
|
superTree.InsertNode(7)
|
|
superTree.InsertNode(5)
|
|
superTree.InsertNode(2)
|
|
superTree.InsertNode(4)
|
|
|
|
superTree.Print()
|
|
|
|
subTree1 := NewBSTree(3, &intComparator{})
|
|
subTree1.InsertNode(5)
|
|
subTree1.InsertNode(2)
|
|
subTree1.InsertNode(4)
|
|
|
|
assert.Equal(true, superTree)
|
|
subTree1.Print()
|
|
|
|
} |