【182】4-1结构体和方法
作者:互联网
package main
import "fmt"
type treeNode struct {
value int
//*treeNode left,right 是两个指针类型,但是定义指针,为什么要用treeNode 我有点难理解,
// 好像就是用户* +这个结构体的名字就可以表示指针
left, right *treeNode
}
// 在方法之前 加括号,跟其他的语言不一样,这叫做 接收者 (node treeNode),这个node参数是传值的,go语言所有参数都是传值的,调用的时候使用 root.print(),
// 如果写成print(node treeNode) 这种形式的,那么在main方法中调用的时候需要用 print(root)
func (node treeNode) print() {
fmt.Print(node.value," ")
}
func (node *treeNode) setValue(value int) {
if node == nil {
fmt.Println("Setting value to nil node . Ignored")
return
}
node.value = value
}
func (node *treeNode) traverse() {
if node == nil {
return
}
node.left.traverse()
node.print()
node.right.traverse()
}
//使用自定义工厂函数
func createNode(value int) *treeNode{
//C++ 里面好像不能返回局部变量,但是在go语言里面是可以返回局部变量的
return &treeNode{value:value}
//C++中我们的局部变量是在栈上的,
}
func main() {
var root treeNode
root = treeNode{value : 3}
root.left = &treeNode{}
root.right = &treeNode{5,nil,nil}
root.right.left = new(treeNode)
root.left.right = createNode(2);
//root.print()
root.right.left.setValue(4)
//root.right.left.print()
//fmt.Println()
//var pRoot *treeNode
//pRoot.setValue(200)
//pRoot = &root;
//pRoot.setValue(300)
//pRoot.print()
root.traverse()
}
标签:node,right,treeNode,方法,value,182,print,root,结构 来源: https://blog.csdn.net/weixin_39534472/article/details/123596432