package main
import "fmt"
func main() {
//定义treeNode结构体
var root treeNode
root = treeNode{value:3}
fmt.Println(root)
fmt.Println()
root.left = &treeNode{}
root.left.print()
fmt.Println()
root.right = &treeNode{5,nil,nil}
root.right.print()
fmt.Println()
root.right.left = new(treeNode)
root.right.left.print()
fmt.Println()
root.left.right = createValue(2)
root.left.right.print()
fmt.Println()
root.right.left.checkValue(4)
root.right.left.print()
fmt.Println()
//var roots *treeNode
//roots.setValue(200)
//roots = &root
//roots.setValue(300)
//roots.print()
root.traverse()
}
//定义结构体 struct
type treeNode struct {
value int
left, right *treeNode
}
//为结构体定义方法 打印
func (node treeNode) print() {
fmt.Print(node.value)
}
func (node *treeNode) checkValue(value int) {
node.value = value
}
//添加tree
func addValue(value int) *treeNode{
return &treeNode{value:value}
}
//修改
func (node *treeNode) setValue(value int) {
if node == nil {
fmt.Println("nil也可以作为指针")
return
}
node.value = value
}
func createValue(value int ) *treeNode{
return &treeNode{value:value}
}
/**
*排序
*/
func (node *treeNode) traverse() {
if (node == nil) {
return
}
//左子值
node.left.traverse()
node.print()
node.right.traverse()
}
{3 <nil> <nil>}
0
5
0
2
4
02345
1:nil指针也可以调用方法
2:要改变内容必须使用指针接受者
3:结构过大也考虑使用指针接受者
4:建议一致性:如果是指针接受者,最好都是指针接受者
5:值接受者是go语言特有