Skip to content

Commit 2cb7328

Browse files
committed
Pointer to pointer example
1 parent 647e396 commit 2cb7328

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package main
2+
3+
func main() {
4+
name := "hamed"
5+
namePtr := &name
6+
namePtr2Ptr := &namePtr
7+
8+
}
9+
10+
func search1() {
11+
t1 := &Tree[int]{
12+
cmp: func(a int, b int) int {
13+
if a < b {
14+
return -1
15+
} else if a > b {
16+
return 1
17+
} else {
18+
return 0
19+
}
20+
21+
},
22+
root: &leaf[int]{val: 12},
23+
}
24+
25+
for i := 0; i < 1000; i++ {
26+
root := t1.root
27+
var left = root.left
28+
var right = root.right
29+
left.val = i
30+
}
31+
}
32+
33+
func search2() {
34+
35+
}
36+
37+
func (bt *Tree[T]) find1(val T) *leaf[T] {
38+
pl := bt.root
39+
for pl != nil {
40+
switch cmp := bt.cmp(val, (*pl).val); {
41+
case cmp < 0:
42+
pl = (*pl).left
43+
case cmp > 0:
44+
pl = (*pl).right
45+
default:
46+
return pl
47+
}
48+
}
49+
return pl
50+
}
51+
52+
func (bt *Tree[T]) find(val T) **leaf[T] {
53+
pl := &bt.root
54+
for *pl != nil {
55+
switch cmp := bt.cmp(val, (*pl).val); {
56+
case cmp < 0:
57+
pl = &(*pl).left
58+
case cmp > 0:
59+
pl = &(*pl).right
60+
default:
61+
return pl
62+
}
63+
}
64+
return pl
65+
}
66+
67+
type Tree[T any] struct {
68+
cmp func(T, T) int
69+
root *leaf[T]
70+
}
71+
72+
type leaf[T any] struct {
73+
val T
74+
left, right *leaf[T]
75+
}

0 commit comments

Comments
 (0)