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()) } }