add treesort
parent
9f095a1fbe
commit
ba2e1413a2
@ -0,0 +1,63 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
// definition of a bst node
|
||||
type node struct {
|
||||
val int
|
||||
left *node
|
||||
right *node
|
||||
}
|
||||
|
||||
// definition of a node
|
||||
type btree struct {
|
||||
root *node
|
||||
}
|
||||
|
||||
// allocating a new node
|
||||
func newNode(val int) *node {
|
||||
return &node{val, nil, nil}
|
||||
}
|
||||
|
||||
// insert nodes into a binary search tree
|
||||
func insert(root *node, val int) *node {
|
||||
if root == nil {
|
||||
return newNode(val)
|
||||
}
|
||||
if val < root.val {
|
||||
root.left = insert(root.left, val)
|
||||
} else {
|
||||
root.right = insert(root.right, val)
|
||||
}
|
||||
return root
|
||||
}
|
||||
|
||||
// inorder traversal algorithm
|
||||
// Copies the elements of the bst to the array in sorted order
|
||||
func inorderCopy(n *node, array []int, index *int) {
|
||||
if n != nil {
|
||||
inorderCopy(n.left, array, index)
|
||||
array[*index] = n.val
|
||||
*index++
|
||||
inorderCopy(n.right, array, index)
|
||||
}
|
||||
}
|
||||
|
||||
func treesort(array []int, tree *btree) {
|
||||
// build the binary search tree
|
||||
for _, element := range array {
|
||||
tree.root = insert(tree.root, element)
|
||||
}
|
||||
index := 0
|
||||
// perform inorder traversal to get the elements in sorted order
|
||||
inorderCopy(tree.root, array, &index)
|
||||
}
|
||||
|
||||
// tester
|
||||
func main() {
|
||||
tree := &btree{nil}
|
||||
numbers := []int{5, 4, 3, 2, 1, -1, 0}
|
||||
fmt.Println("numbers : ", numbers)
|
||||
treesort(numbers, tree)
|
||||
fmt.Println("numbers : ", numbers)
|
||||
}
|
Loading…
Reference in New Issue