其他分享
首页 > 其他分享> > 【182】4-1结构体和方法

【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