Files
LeetCode-Go/structures/TreeNode_test.go
2020-08-06 23:29:19 +08:00

167 lines
3.1 KiB
Go

package structures
import (
"reflect"
"testing"
"github.com/stretchr/testify/assert"
)
var (
// 同一个 TreeNode 的不同表达方式
// 1
// / \
// 2 3
// / \ / \
// 4 5 6 7
LeetCodeOrder = []int{1, 2, 3, 4, 5, 6, 7}
preOrder = []int{1, 2, 4, 5, 3, 6, 7}
inOrder = []int{4, 2, 5, 1, 6, 3, 7}
postOrder = []int{4, 5, 2, 6, 7, 3, 1}
)
func Test_Ints2TreeNode(t *testing.T) {
ast := assert.New(t)
expected := PreIn2Tree(preOrder, inOrder)
actual := Ints2TreeNode(LeetCodeOrder)
ast.Equal(expected, actual)
actual = Ints2TreeNode([]int{})
ast.Nil(actual)
}
func Test_preIn2Tree(t *testing.T) {
ast := assert.New(t)
actual := Tree2Postorder(PreIn2Tree(preOrder, inOrder))
expected := postOrder
ast.Equal(expected, actual)
ast.Panics(func() { PreIn2Tree([]int{1}, []int{}) })
ast.Nil(PreIn2Tree([]int{}, []int{}))
}
func Test_inPost2Tree(t *testing.T) {
ast := assert.New(t)
actual := Tree2Preorder(InPost2Tree(inOrder, postOrder))
expected := preOrder
ast.Equal(expected, actual)
ast.Panics(func() { InPost2Tree([]int{1}, []int{}) })
ast.Nil(InPost2Tree([]int{}, []int{}))
}
func Test_tree2Ints(t *testing.T) {
ast := assert.New(t)
root := PreIn2Tree(preOrder, inOrder)
ast.Equal(preOrder, Tree2Preorder(root))
ast.Nil(Tree2Preorder(nil))
ast.Equal(inOrder, Tree2Inorder(root))
ast.Nil(Tree2Inorder(nil))
ast.Equal(postOrder, Tree2Postorder(root))
ast.Nil(Tree2Postorder(nil))
}
func Test_indexOf(t *testing.T) {
ast := assert.New(t)
ast.Equal(1, indexOf(1, []int{0, 1, 2, 3}))
ast.Panics(func() { indexOf(0, []int{1, 2, 3}) })
}
func Test_TreeNode_Equal(t *testing.T) {
type args struct {
a *TreeNode
}
tests := []struct {
name string
fields args
args args
want bool
}{
{
"相等",
args{Ints2TreeNode([]int{1, 2, 3, 4, 5})},
args{Ints2TreeNode([]int{1, 2, 3, 4, 5})},
true,
},
{
"不相等",
args{Ints2TreeNode([]int{1, 2, 3, 4, 5})},
args{Ints2TreeNode([]int{1, 2, 3, NULL, 5})},
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tn := tt.fields.a
if got := tn.Equal(tt.args.a); got != tt.want {
t.Errorf("TreeNode.Equal() = %v, want %v", got, tt.want)
}
})
}
}
func Test_GetTargetNode(t *testing.T) {
ints := []int{3, 5, 1, 6, 2, 0, 8, NULL, NULL, 7, 4}
root := Ints2TreeNode(ints)
type args struct {
root *TreeNode
target int
}
tests := []struct {
name string
args args
want *TreeNode
}{
{
"找到 root.Right.Right",
args{
root: root,
target: 8,
},
root.Right.Right,
},
{
"找到 root.Left.Left",
args{
root: root,
target: 6,
},
root.Left.Left,
},
//
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := GetTargetNode(tt.args.root, tt.args.target); !reflect.DeepEqual(got, tt.want) {
t.Errorf("GetTargetNode() = %v, want %v", got, tt.want)
}
})
}
}
func Test_Tree2ints(t *testing.T) {
ast := assert.New(t)
root := PreIn2Tree(preOrder, inOrder)
actual := LeetCodeOrder
expected := Tree2ints(root)
ast.Equal(expected, actual)
}