练习代码:
package main
import "fmt"
//面向对象中go语言只支持封装,不支持继承和多态
type treenode struct { //定义结构体名称为treenode
value int //定义结构体成员value类型为int
left, right *treenode //定义结构体成员left,right类型为*treenode
}
//自定义工厂函数
func createtreenode(value int) *treenode {
return &treenode{value: value} //可以直接返回局部变量地址
}
//定义方法
func (node treenode) print() { //(node treenode)是接受者,可以写在print后的括号里
fmt.Print(node.value)
}
func (node *treenode) setvalue(value int) { //因为方法也是传值,如果需要改变的话需要加星号
node.value = value
}
//结构体的遍历
func (node *treenode) traverse() {
if node == nil { //判断是否出错
return
}
node.left.traverse()
node.print()
node.right.traverse()
}
func main() {
//结构体的引用
var root treenode
root = treenode{value: 3}
root.left = &treenode{}
root.right = &treenode{5, nil, nil}
root.right.left = createtreenode(2)
nodes := []treenode{
{value: 3},
{},
{6, nil, &root},
}
fmt.Println(nodes)
root.right.left.setvalue(4)
root.right.left.print()
fmt.Println()
root.traverse()
}
练习结果:
[{3 <nil> <nil>} {0 <nil> <nil>} {6 <nil> 0xc000096060}]
4
0345
运行截图:![](https://img-blog.csdnimg.cn/2562683f3589415194cdc6a617cb9e7f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56uL5b-X5Yay5rW35aSn,size_20,color_FFFFFF,t_70,g_se,x_16)