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()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。