1.结构的定义
type identifier struct {
field1 type1
field2 type2
...
}
2.结构体的创建
表达式 new(Type) 和 &Type{} 是等价的
& 不是必须的
root := TreeNode{Value: 3}
root.Left = &TreeNode{}
root.Right = &TreeNode{5, nil, nil}
root.Left.Right = new(TreeNode)
3.为结构体定义方法
func (node treeNode) print() {
fmt.Print(node.value)
}
func (node *treeNode) setValue(value int) {
node.value = value
}
只有使用指针才可以改变结内容
nil指针也可以调用方法
func (node *treeNode) setValue(value int) {
if node == nil {
fmt.Println("setting value to nil node,ignored")
return
}
node.value = value
}
二叉树
package main
import "fmt"
type treeNode struct {
value int
left, right *treeNode
}
func (node treeNode) print() {
fmt.Print(node.value)
fmt.Print(" ")
}
func (node *treeNode) setValue(value int) {
if node == nil {
fmt.Println("setting value to nil node,ignored")
}
node.value = value
}
func (node *treeNode) traverse() {
if node == nil {
return
}
node.left.traverse()
node.print()
node.right.traverse()
}
func createNode(value int) *treeNode {
return &treeNode{value: value}
}
func main() {
var root treeNode
// fmt.Println(root)
root = treeNode{value: 3}
root.left = &treeNode{}
root.right = &treeNode{5, nil, nil}
root.right.left = new(treeNode)
// nodes := []treeNode {
// {value: 3},
// {},
// {6, nil, &root},
// }
// fmt.Println(nodes)
root.left.right = createNode(2)
root.print()
root.right.left.setValue(4)
root.right.left.print()
fmt.Println()
root.print()
root.setValue(100)
pRoot := &root
pRoot.print()
pRoot.setValue(200)
pRoot.print()
root.traverse()
}