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 b286192

Browse files
all operations complete
1 parent 875f07b commit b286192

File tree

1 file changed

+78
-11
lines changed

1 file changed

+78
-11
lines changed

‎BST/bst.go

Lines changed: 78 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ func main() {
3131
tree.FindMin()
3232
fmt.Println("Max element: ")
3333
tree.FindMax()
34+
fmt.Println("Delete 31: ", tree.Delete(31))
35+
fmt.Println("Delete 5: ", tree.Delete(5))
36+
fmt.Println("Delete 5: ", tree.Delete(1))
37+
fmt.Println("Size: ", tree.Size())
38+
fmt.Println("Show: ")
39+
tree.Show()
40+
fmt.Println("Min element: ")
41+
tree.FindMin()
42+
fmt.Println("Max element: ")
43+
tree.FindMax()
3444
}
3545

3646
// Node is a representation of a single node in tree. (recursive ADT)
@@ -49,10 +59,10 @@ type Bst struct {
4959
/*
5060
Binary Search Tree ADT Operations
5161
* + Insert(k): вставка элемента k в дерево.
52-
* Delete(k): удаление элемента k.
62+
* + Delete(k): удаление элемента k.
5363
* + Search(k): поиск значения элемента k в структуре, есть он или нет.
54-
* FindMax(): поиск максимального значения.
55-
* FindMin(): поиск минимального значения.
64+
* + FindMax(): поиск максимального значения.
65+
* + FindMin(): поиск минимального значения.
5666
* + Show & Size(): печать дерева и размер.
5767
*/
5868

@@ -136,28 +146,85 @@ func printNode(root *Node) {
136146

137147
// FindMin - print min element tree
138148
func (tree *Bst) FindMin() {
139-
minValue(tree.root)
149+
fmt.Println(minValue(tree.root))
140150
}
141151

142-
func minValue(root *Node) {
152+
func minValue(root *Node) int{
143153
if root != nil {
144154
if root.left == nil {
145-
fmt.Println(root.key)
155+
returnroot.key
146156
}
147-
minValue(root.left)
157+
returnminValue(root.left)
148158
}
159+
return root.key
149160
}
150161

151162
// FindMax - print max element tree
152163
func (tree *Bst) FindMax() {
153-
maxValue(tree.root)
164+
fmt.Println(maxValue(tree.root))
154165
}
155166

156-
func maxValue(root *Node) {
167+
func maxValue(root *Node) int{
157168
if root != nil {
158169
if root.right == nil {
159-
fmt.Println(root.key)
170+
return root.key
171+
}
172+
return maxValue(root.right)
173+
}
174+
return root.key
175+
}
176+
177+
// Delete element tree
178+
func (tree *Bst) Delete(value int) bool {
179+
if !tree.Search(value) || tree.root == nil {
180+
return false
181+
}
182+
183+
if tree.root.key == value {
184+
tempRoot := &Node{0, nil, nil}
185+
tempRoot.left = tree.root
186+
r := del(tree.root, tempRoot, value)
187+
tree.root = tempRoot.left
188+
return r
189+
}
190+
return del(tree.root.left, tree.root, value) || del(tree.root.right, tree.root, value)
191+
}
192+
193+
func del(root *Node, parent *Node, value int) bool {
194+
switch {
195+
case root.key == value:
196+
if root.left != nil && root.right != nil {
197+
root.key = minValue(root.right)
198+
return del(root.right, root, root.key)
199+
}
200+
link(parent, root)
201+
return true
202+
case root.key > value:
203+
if root.left == nil {
204+
return false
205+
}
206+
return del(root.left, root, value)
207+
case root.key < value:
208+
if root.right == nil {
209+
return false
210+
}
211+
return del(root.right, root, value)
212+
}
213+
return false
214+
}
215+
216+
func link(parent *Node, root *Node) {
217+
if parent.left == root {
218+
if root.left != nil {
219+
parent.left = root.left
220+
} else {
221+
parent.left = root.right
222+
}
223+
} else if parent.right == root {
224+
if root.left != nil {
225+
parent.right = root.left
226+
} else {
227+
parent.right = root.right
160228
}
161-
maxValue(root.right)
162229
}
163230
}

0 commit comments

Comments
(0)

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