Files
leetcode/data-structure/ds-tree_test.go
T
2026-07-20 19:57:25 +08:00

96 lines
2.1 KiB
Go

package ds
import "testing"
func TestBSTInsertInOrder(t *testing.T) {
tree := NewBST[int]()
vals := []int{5, 3, 8, 1, 4, 7, 9}
for _, v := range vals {
tree.Insert(v)
}
got := tree.InOrder()
want := []int{1, 3, 4, 5, 7, 8, 9}
if len(got) != len(want) {
t.Fatalf("InOrder 长度 = %d, want %d", len(got), len(want))
}
for i := range want {
if got[i] != want[i] {
t.Fatalf("InOrder[%d] = %d, want %d", i, got[i], want[i])
}
}
}
func TestBSTSearch(t *testing.T) {
tree := NewBST[int]()
for _, v := range []int{5, 3, 8, 1} {
tree.Insert(v)
}
if !tree.Search(3) {
t.Fatal("Search(3) 应为 true")
}
if tree.Search(99) {
t.Fatal("Search(99) 应为 false")
}
if tree.Search(0) {
t.Fatal("Search(0) 应为 false")
}
}
func TestBSTTraversals(t *testing.T) {
tree := NewBST[int]()
// 构造:
// 4
// / \
// 2 6
// / \ / \
// 1 3 5 7
for _, v := range []int{4, 2, 6, 1, 3, 5, 7} {
tree.Insert(v)
}
pre := tree.PreOrder()
wantPre := []int{4, 2, 1, 3, 6, 5, 7}
for i := range wantPre {
if pre[i] != wantPre[i] {
t.Fatalf("PreOrder[%d] = %d, want %d", i, pre[i], wantPre[i])
}
}
post := tree.PostOrder()
wantPost := []int{1, 3, 2, 5, 7, 6, 4}
for i := range wantPost {
if post[i] != wantPost[i] {
t.Fatalf("PostOrder[%d] = %d, want %d", i, post[i], wantPost[i])
}
}
lvl := tree.LevelOrder()
wantLvl := []int{4, 2, 6, 1, 3, 5, 7}
for i := range wantLvl {
if lvl[i] != wantLvl[i] {
t.Fatalf("LevelOrder[%d] = %d, want %d", i, lvl[i], wantLvl[i])
}
}
dfs := tree.DFS()
// DFS 迭代版是前序,应与 PreOrder 相同
for i := range wantPre {
if dfs[i] != wantPre[i] {
t.Fatalf("DFS[%d] = %d, want %d", i, dfs[i], wantPre[i])
}
}
}
func TestBSTHeightAndEmpty(t *testing.T) {
tree := NewBST[int]()
if tree.Height() != 0 {
t.Fatal("空树高度应为 0")
}
tree.Insert(1)
if tree.Height() != 1 {
t.Fatal("单节点高度应为 1")
}
tree.Insert(2)
tree.Insert(3)
// 退化为链表,高度 3
if tree.Height() != 3 {
t.Fatalf("Height = %d, want 3 (退化链表)", tree.Height())
}
}