標籤:ack struct roo return tree elements imp highlight 數組
練習 7.3: 為在gopl.io/ch4/treesort (§4.4)的*tree類型實現一個String方法去展示tree類型的值序列。
package mainimport( "fmt" "bytes")func main(){ //定義數組 arr:=[...]int{6,2,1,3,4,5} var t *tree for i:=0;i<len(arr);i++{ t=add(t,arr[i]) } //t1:=Sort(arr[:],t) //fmt.Println(arr) fmt.Println(t)}/*練習 7.3: 為在gopl.io/ch4/treesort (§4.4)的*tree類型實現一個String方法去展示tree類型的值序列。*/func (t *tree)String()string{ var buf bytes.Buffer var data []int data=appendValues(data,t) buf.WriteByte(‘{‘) for _,v:=range data{ if buf.Len() > len("{"){ buf.WriteByte(‘ ‘) } //重點:使用了介面約定 fmt.Fprintf(&buf,"%d",v) } buf.WriteByte(‘}‘) return buf.String()}type tree struct { value int left, right *tree}// Sort sorts values in place.func Sort(values []int,root *tree) *tree { //var root *tree for _, v := range values { root = add(root, v) } fmt.Println(root) appendValues(values[:0], root) return root}// appendValues appends the elements of t to values in order// and returns the resulting slice.func appendValues(values []int, t *tree) []int { if t != nil { values = appendValues(values, t.left) values = append(values, t.value) values = appendValues(values, t.right) } return values}func add(t *tree, value int) *tree { if t == nil { // Equivalent to return &tree{value: value}. t = new(tree) t.value = value return t } if value < t.value { t.left = add(t.left, value) } else { t.right = add(t.right, value) } return t}
[日常] Go語言聖經--介面約定習題2