Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a739997

Browse files
author
Sandy
authored
Merge pull request #162 from openset/develop
Add: tree_node
2 parents a6e9c58 + 2d713f4 commit a739997

File tree

4 files changed

+124
-11
lines changed

4 files changed

+124
-11
lines changed

‎internal/kit/tree_node.go‎

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,64 @@
11
package kit
22

3+
import "math"
4+
5+
var NULL = math.MinInt32
6+
37
// Definition for a binary tree node.
48
type TreeNode struct {
59
Val int
610
Left *TreeNode
711
Right *TreeNode
812
}
913

14+
// convert []int to *TreeNode
15+
func SliceInt2TreeNode(s []int) *TreeNode {
16+
l := len(s)
17+
if l == 0 {
18+
return nil
19+
}
20+
tree := &TreeNode{Val: s[0]}
21+
queue := make([]*TreeNode, 0)
22+
node := tree
23+
for i := 1; i < l; i++ {
24+
if s[i] != NULL {
25+
node.Left = &TreeNode{Val: s[i]}
26+
queue = append(queue, node.Left)
27+
}
28+
i++
29+
if i < l && s[i] != NULL {
30+
node.Right = &TreeNode{Val: s[i]}
31+
queue = append(queue, node.Right)
32+
}
33+
if len(queue) > 0 {
34+
node = queue[0]
35+
queue = queue[1:]
36+
} else {
37+
break
38+
}
39+
}
40+
return tree
41+
}
42+
1043
// convert *TreeNode to []int
1144
func TreeNode2SliceInt(t *TreeNode) (s []int) {
45+
if t != nil {
46+
queue := make([]*TreeNode, 1)
47+
queue[0] = t
48+
for len(queue) > 0 {
49+
if queue[0] != nil {
50+
s = append(s, queue[0].Val)
51+
if queue[0].Left != nil || queue[0].Right != nil {
52+
queue = append(queue, queue[0].Left)
53+
}
54+
if queue[0].Right != nil {
55+
queue = append(queue, queue[0].Right)
56+
}
57+
} else {
58+
s = append(s, NULL)
59+
}
60+
queue = queue[1:]
61+
}
62+
}
1263
return
1364
}
14-
15-
// convert []int to *TreeNode
16-
func SliceInt2TreeNode(s []int) *TreeNode {
17-
return nil
18-
}

‎internal/kit/tree_node_test.go‎

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,36 @@
11
package kit
22

3-
import "testing"
3+
import (
4+
"reflect"
5+
"testing"
6+
)
47

58
func TestTreeNode(t *testing.T) {
6-
tests := [...][]int{
7-
{},
9+
tests := [...]struct {
10+
input []int
11+
expected []int
12+
}{
13+
{
14+
input: []int{1, 2, 3, 4},
15+
expected: []int{1, 2, 3, 4},
16+
},
17+
{
18+
input: []int{1, 2, 3, NULL, 5},
19+
expected: []int{1, 2, 3, NULL, 5},
20+
},
21+
{
22+
input: []int{1, 2, 3, NULL, 5, NULL, NULL, NULL},
23+
expected: []int{1, 2, 3, NULL, 5},
24+
},
25+
{
26+
input: nil,
27+
expected: nil,
28+
},
829
}
9-
for _, input := range tests {
10-
TreeNode2SliceInt(nil)
11-
SliceInt2TreeNode(input)
30+
for _, tc := range tests {
31+
output := TreeNode2SliceInt(SliceInt2TreeNode(tc.input))
32+
if !reflect.DeepEqual(output, tc.expected) {
33+
t.Fatalf("input: %v, output: %v, expected: %v", tc.input, output, tc.expected)
34+
}
1235
}
1336
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,15 @@
11
package construct_string_from_binary_tree
2+
3+
import . "github.com/openset/leetcode/internal/kit"
4+
5+
/**
6+
* Definition for a binary tree node.
7+
* type TreeNode struct {
8+
* Val int
9+
* Left *TreeNode
10+
* Right *TreeNode
11+
* }
12+
*/
13+
func tree2str(t *TreeNode) string {
14+
return ""
15+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,31 @@
11
package construct_string_from_binary_tree
2+
3+
import (
4+
"testing"
5+
6+
. "github.com/openset/leetcode/internal/kit"
7+
)
8+
9+
type caseType struct {
10+
input []int
11+
expected string
12+
}
13+
14+
func TestTree2str(t *testing.T) {
15+
tests := [...]caseType{
16+
{
17+
input: []int{1, 2, 3, 4},
18+
expected: "",
19+
},
20+
{
21+
input: []int{1, 2, 3, NULL, 4},
22+
expected: "",
23+
},
24+
}
25+
for _, tc := range tests {
26+
output := tree2str(SliceInt2TreeNode(tc.input))
27+
if output != tc.expected {
28+
t.Fatalf("input: %v, output: %v, expected: %v", tc.input, output, tc.expected)
29+
}
30+
}
31+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /