| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package main;
- import (
- "os"
- "fmt"
- )
- type TreeNode struct {
- Val int
- Left *TreeNode
- Right *TreeNode
- }
- func (tn *TreeNode) Dump() string {
- l := "nil"
- if tn.Left != nil { l = tn.Left.Dump()}
- r := "nil"
- if tn.Right != nil { r = tn.Right.Dump()}
- return fmt.Sprintf("TreeNode(%v, %s, %s)", tn.Val, l, r)
- }
- /**
- * Definition for a binary tree node.
- * type TreeNode struct {
- * Val int
- * Left *TreeNode
- * Right *TreeNode
- * }
- */
- func increasingBST(root *TreeNode) *TreeNode {
- var vals []int
- var getVals func(r *TreeNode) []int
- getVals = func(r *TreeNode) []int {
- if r == nil { return []int{} }
- var vs []int = []int{ r.Val }
- vs = append(vs, getVals(r.Left)[:]...)
- vs = append(vs, getVals(r.Right)[:]...)
- return vs
- }
- vals = getVals(root)
- for {
- var changed bool = false
- for i := range (len(vals)-1) {
- if vals[i] > vals[i+1] {
- vals[i+1], vals[i] = vals[i], vals[i+1]
- changed = true
- }
- }
- if changed == false { break }
- }
- var ret TreeNode
- var tail *TreeNode = &ret
- for i, v := range vals {
- tail.Val = v
- if i < (len(vals) - 1) { tail.Right = &(TreeNode {}) }
- tail = tail.Right
- }
- return &ret
- }
- func main() {
- r := TreeNode { 5, &(TreeNode {1, nil, nil}), &(TreeNode {7, nil, nil})}
- t := increasingBST(&r)
- fmt.Println(r.Dump())
- fmt.Println(t.Dump())
- os.Exit(0)
- }
|