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 02dd95d

Browse files
author
陈世伟
committed
feat: 2021年05月10日21:02:06
1 parent cf13a87 commit 02dd95d

File tree

12 files changed

+416
-23
lines changed

12 files changed

+416
-23
lines changed

‎leetcode/0199/right_side_view.go‎

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,22 @@ func rightSideView(root *TreeNode) []int {
1919
if root == nil {
2020
return nil
2121
}
22-
q:=NewQueue()
23-
q.Push(root)
22+
varq []*TreeNode
23+
q=append(q, root)
2424

2525
var nums []int
26-
for !q.Empty() {
27-
l := q.Len()
26+
for len(q) !=0 {
27+
l := len(q)
2828
for i := 0; i < l; i++ {
29-
n := q.Pop().(*TreeNode)
29+
n := q[0]
30+
q = q[1:]
3031

3132
if n.Left != nil {
32-
q.Push(n.Left)
33+
q=append(q, n.Left)
3334
}
3435

3536
if n.Right != nil {
36-
q.Push(n.Right)
37+
q=append(q, n.Right)
3738
}
3839

3940
if i == l-1 {
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package _07_二叉树的层序遍历II
2+
3+
/**
4+
* Definition for a binary tree node.
5+
* type TreeNode struct {
6+
* Val int
7+
* Left *TreeNode
8+
* Right *TreeNode
9+
* }
10+
*/
11+
type TreeNode struct {
12+
Val int
13+
Left *TreeNode
14+
Right *TreeNode
15+
}
16+
17+
func levelOrderBottom(root *TreeNode) [][]int {
18+
var q []*TreeNode
19+
20+
if root == nil {
21+
return nil
22+
}
23+
24+
var result [][]int
25+
26+
q = append(q, root)
27+
for len(q) != 0 {
28+
l := len(q)
29+
var nums []int
30+
for i := 0; i < l; i++ {
31+
node := q[0]
32+
q = q[1:]
33+
nums = append(nums, node.Val)
34+
if node.Left != nil {
35+
q = append(q, node.Left)
36+
}
37+
if node.Right != nil {
38+
q = append(q, node.Right)
39+
}
40+
}
41+
result = append(result, nums)
42+
}
43+
44+
var left, right = 0, len(result) - 1
45+
if len(result) > 0 {
46+
for left < right {
47+
result[left], result[right] = result[right], result[left]
48+
left++
49+
right--
50+
}
51+
}
52+
53+
return result
54+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package _07_二叉树的层序遍历II
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func Test_levelOrderBottom(t *testing.T) {
9+
type args struct {
10+
root *TreeNode
11+
}
12+
tests := []struct {
13+
name string
14+
args args
15+
want [][]int
16+
}{
17+
{name: `[3,9,20,null,null,15,7],[
18+
[15,7],
19+
[9,20],
20+
[3]
21+
]`, args: args{root: &TreeNode{
22+
Val: 3,
23+
Left: &TreeNode{
24+
Val: 9,
25+
Left: nil,
26+
Right: nil,
27+
},
28+
Right: &TreeNode{
29+
Val: 20,
30+
Left: &TreeNode{
31+
Val: 15,
32+
Left: nil,
33+
Right: nil,
34+
},
35+
Right: &TreeNode{
36+
Val: 7,
37+
Left: nil,
38+
Right: nil,
39+
},
40+
},
41+
}}, want: [][]int{
42+
{15, 7},
43+
{9, 20},
44+
{3},
45+
}},
46+
}
47+
for _, tt := range tests {
48+
t.Run(tt.name, func(t *testing.T) {
49+
if got := levelOrderBottom(tt.args.root); !reflect.DeepEqual(got, tt.want) {
50+
t.Errorf("levelOrderBottom() = %v, want %v", got, tt.want)
51+
}
52+
})
53+
}
54+
}

‎leetcode/3.无重复字符的最长子串/lengthOfLongestSubstring.go‎

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
11
package __无重复字符的最长子串
22

33
func lengthOfLongestSubstring(s string) int {
4-
var dict = make(map[string]int)
5-
var l = len(s)
6-
if l == 0 {
7-
return 0
8-
}
9-
104
var (
5+
l = len(s)
6+
dict = make(map[uint8]int)
117
start int
128
maxLen int
139
)
10+
if l == 0 {
11+
return 0
12+
}
13+
1414
for i := 0; i < l; i++ {
15-
if workIdx, ok := dict[string(s[i])]; ok {
16-
start = max(workIdx+1, start)
15+
if idx, ok := dict[s[i]]; ok {
16+
start = max(idx+1, start)
1717
}
18-
19-
dict[string(s[i])] = i
20-
maxLen = max(maxLen, i-start+1)
18+
dict[s[i]] = i
19+
maxLen = max(i-start+1, maxLen)
2120
}
2221

2322
return maxLen
24-
2523
}
2624

2725
func max(a, b int) int {

‎leetcode/3.无重复字符的最长子串/lengthOfLongestSubstring_test.go‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ func Test_lengthOfLongestSubstring(t *testing.T) {
1111
args args
1212
want int
1313
}{
14-
{name: `输入: s = "abcabcbb"
15-
输出: 3
16-
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。`, args: args{s: "abcabcbb"}, want: 3},
14+
{name: `输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。`, args: args{s: "abcabcbb"}, want: 3},
15+
{name: `输入: s = "dvdf"输出: 3`, args: args{s: "dvdf"}, want: 3},
1716
}
1817
for _, tt := range tests {
1918
t.Run(tt.name, func(t *testing.T) {
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package _29_N叉树的层序遍历
2+
3+
/**
4+
* Definition for a Node.
5+
* type Node struct {
6+
* Val int
7+
* Children []*Node
8+
* }
9+
*/
10+
11+
type Node struct {
12+
Val int
13+
Children []*Node
14+
}
15+
16+
func levelOrder(root *Node) [][]int {
17+
if root == nil {
18+
return nil
19+
}
20+
var (
21+
result [][]int
22+
q []*Node
23+
)
24+
25+
q = append(q, root)
26+
for len(q) != 0 {
27+
l := len(q)
28+
var nums []int
29+
for i := 0; i < l; i++ {
30+
node := q[0]
31+
q = q[1:]
32+
nums = append(nums, node.Val)
33+
childLen := len(node.Children)
34+
for j := 0; j < childLen; j++ {
35+
q = append(q, node.Children[j])
36+
}
37+
}
38+
result = append(result, nums)
39+
}
40+
return result
41+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package _29_N叉树的层序遍历
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func Test_levelOrder(t *testing.T) {
9+
type args struct {
10+
root *Node
11+
}
12+
tests := []struct {
13+
name string
14+
args args
15+
want [][]int
16+
}{
17+
{name: `输入:root = [1,null,3,2,4,null,5,6]
18+
输出:[[1],[3,2,4],[5,6]]`, args: args{root: &Node{
19+
Val: 1,
20+
Children: []*Node{
21+
&Node{
22+
Val: 3,
23+
Children: []*Node{
24+
&Node{
25+
Val: 5,
26+
Children: nil,
27+
},
28+
&Node{
29+
Val: 6,
30+
Children: nil,
31+
},
32+
},
33+
},
34+
&Node{
35+
Val: 2,
36+
Children: nil,
37+
},
38+
&Node{
39+
Val: 4,
40+
Children: nil,
41+
},
42+
},
43+
}}, want: [][]int{
44+
{1},
45+
{3, 2, 4},
46+
{5, 6},
47+
}},
48+
}
49+
for _, tt := range tests {
50+
t.Run(tt.name, func(t *testing.T) {
51+
if got := levelOrder(tt.args.root); !reflect.DeepEqual(got, tt.want) {
52+
t.Errorf("levelOrder() = %v, want %v", got, tt.want)
53+
}
54+
})
55+
}
56+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package _89_N叉树的前序遍历
2+
3+
/**
4+
* Definition for a Node.
5+
* type Node struct {
6+
* Val int
7+
* Children []*Node
8+
* }
9+
*/
10+
11+
type Node struct {
12+
Val int
13+
Children []*Node
14+
}
15+
16+
func preorder(root *Node) []int {
17+
if root == nil {
18+
return nil
19+
}
20+
21+
var (
22+
stack []*Node
23+
result []int
24+
)
25+
stack = append(stack, root)
26+
27+
for len(stack) != 0 {
28+
l := len(stack)
29+
for i := 0; i < l; i++ {
30+
node := stack[len(stack)-1]
31+
stack = stack[:len(stack)-1]
32+
result = append(result, node.Val)
33+
childLen := len(node.Children)
34+
for j := childLen - 1; j >= 0; j-- {
35+
stack = append(stack, node.Children[j])
36+
}
37+
}
38+
}
39+
40+
return result
41+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package _89_N叉树的前序遍历
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func Test_preorder(t *testing.T) {
9+
type args struct {
10+
root *Node
11+
}
12+
tests := []struct {
13+
name string
14+
args args
15+
want []int
16+
}{
17+
{name: `输入:root = [1,null,3,2,4,null,5,6]
18+
输出:[1,3,5,6,2,4]`, args: args{root: &Node{
19+
Val: 1,
20+
Children: []*Node{
21+
&Node{
22+
Val: 3,
23+
Children: []*Node{
24+
&Node{
25+
Val: 5,
26+
Children: nil,
27+
},
28+
&Node{
29+
Val: 6,
30+
Children: nil,
31+
},
32+
},
33+
},
34+
&Node{
35+
Val: 2,
36+
Children: nil,
37+
},
38+
&Node{
39+
Val: 4,
40+
Children: nil,
41+
},
42+
},
43+
}}, want: []int{1, 3, 5, 6, 2, 4}},
44+
}
45+
for _, tt := range tests {
46+
t.Run(tt.name, func(t *testing.T) {
47+
if got := preorder(tt.args.root); !reflect.DeepEqual(got, tt.want) {
48+
t.Errorf("preorder() = %v, want %v", got, tt.want)
49+
}
50+
})
51+
}
52+
}

0 commit comments

Comments
(0)

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