Guest User

Untitled

a guest
Nov 17th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 KB | None | 0 0
  1. package tree
  2.  
  3. type tree struct {
  4. value int
  5. left *tree
  6. right *tree
  7. }
  8.  
  9. // Sort sorts values in place.
  10. func Sort(values []int) {
  11. var root *tree
  12.  
  13. for _, v := range values {
  14. root = add(root, v)
  15. }
  16.  
  17. appendValues(values[:0], root)
  18. }
  19.  
  20. // appendValues appends the elements of t to values in order
  21. // and returns the resulting slice.
  22. func appendValues(values []int, t *tree) []int {
  23. if t != nil {
  24. values = appendValues(values, t.left)
  25. values = append(values, t.value)
  26. values = appendValues(values, t.right)
  27. }
  28.  
  29. return values
  30. }
  31.  
  32. func add(t *tree, value int) *tree {
  33. if t == nil {
  34. // Equivalent to return &tree{ value: value }
  35. t = new(tree)
  36. t.value = value
  37. return t
  38. }
  39.  
  40. if value < t.value {
  41. t.left = add(t.left, value)
  42. } else {
  43. t.right = add(t.right, value)
  44. }
  45.  
  46. return t
  47. }
Add Comment
Please, Sign In to add comment