897.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main;
  2. import (
  3. "os"
  4. "fmt"
  5. )
  6. type TreeNode struct {
  7. Val int
  8. Left *TreeNode
  9. Right *TreeNode
  10. }
  11. func (tn *TreeNode) Dump() string {
  12. l := "nil"
  13. if tn.Left != nil { l = tn.Left.Dump()}
  14. r := "nil"
  15. if tn.Right != nil { r = tn.Right.Dump()}
  16. return fmt.Sprintf("TreeNode(%v, %s, %s)", tn.Val, l, r)
  17. }
  18. /**
  19. * Definition for a binary tree node.
  20. * type TreeNode struct {
  21. * Val int
  22. * Left *TreeNode
  23. * Right *TreeNode
  24. * }
  25. */
  26. func increasingBST(root *TreeNode) *TreeNode {
  27. var vals []int
  28. var getVals func(r *TreeNode) []int
  29. getVals = func(r *TreeNode) []int {
  30. if r == nil { return []int{} }
  31. var vs []int = []int{ r.Val }
  32. vs = append(vs, getVals(r.Left)[:]...)
  33. vs = append(vs, getVals(r.Right)[:]...)
  34. return vs
  35. }
  36. vals = getVals(root)
  37. for {
  38. var changed bool = false
  39. for i := range (len(vals)-1) {
  40. if vals[i] > vals[i+1] {
  41. vals[i+1], vals[i] = vals[i], vals[i+1]
  42. changed = true
  43. }
  44. }
  45. if changed == false { break }
  46. }
  47. var ret TreeNode
  48. var tail *TreeNode = &ret
  49. for i, v := range vals {
  50. tail.Val = v
  51. if i < (len(vals) - 1) { tail.Right = &(TreeNode {}) }
  52. tail = tail.Right
  53. }
  54. return &ret
  55. }
  56. func main() {
  57. r := TreeNode { 5, &(TreeNode {1, nil, nil}), &(TreeNode {7, nil, nil})}
  58. t := increasingBST(&r)
  59. fmt.Println(r.Dump())
  60. fmt.Println(t.Dump())
  61. os.Exit(0)
  62. }