先看一下通常的二叉树写法,上代码:
package main
import (
"fmt"
)
type Node struct {
LeftNode *Node
RightNode *Node
Value int
}
func buildTree() Node {
var tree Node
tree.Value = 0
tree.LeftNode = new(Node)
tree.LeftNode.Value = 1
tree.LeftNode.LeftNode = new(Node)
tree.LeftNode.LeftNode.Value = 3
tree.LeftNode.LeftNode.LeftNode = new(Node)
tree.LeftNode.LeftNode.LeftNode.Value = 5
tree.LeftNode.LeftNode.RightNode = new(Node)
tree.LeftNode.LeftNode.RightNode.Value = 6
tree.RightNode = new(Node)
tree.RightNode.Value = 2
tree.RightNode.LeftNode = new(Node)
tree.RightNode.LeftNode.Value = 4
tree.RightNode.LeftNode.RightNode = new(Node)
tree.RightNode.LeftNode.RightNode.Value = 7
return tree
}
func (node Node)do() {
fmt.Println(node.Value)
if node.LeftNode != nil {
node.LeftNode.do()
}
if node.RightNode != nil{
node.RightNode.do()
}
}
func main() {
tree := buildTree()
tree.do()
}
函数式编程的写法:
node.go
package node
type Node struct {
LeftNode *Node
RightNode *Node
Value int
}
func (node Node)Do(f func(n *Node)) {
f(&node)
if node.LeftNode != nil {
node.LeftNode.Do(f)
}
if node.RightNode != nil{
node.RightNode.Do(f)
}
}
main.go
package main
import (
"fmt"
"go_study/005_function/treenode/node"
"strconv"
)
func buildTree() node.Node {
var tree node.Node
tree.Value = 0
tree.LeftNode = new(node.Node)
tree.LeftNode.Value = 1
tree.LeftNode.LeftNode = new(node.Node)
tree.LeftNode.LeftNode.Value = 3
tree.LeftNode.LeftNode.LeftNode = new(node.Node)
tree.LeftNode.LeftNode.LeftNode.Value = 5
tree.LeftNode.LeftNode.RightNode = new(node.Node)
tree.LeftNode.LeftNode.RightNode.Value = 6
tree.RightNode = new(node.Node)
tree.RightNode.Value = 2
tree.RightNode.LeftNode = new(node.Node)
tree.RightNode.LeftNode.Value = 4
tree.RightNode.LeftNode.RightNode = new(node.Node)
tree.RightNode.LeftNode.RightNode.Value = 7
return tree
}
func main() {
tree := buildTree()
count := 0
tree.Do(func(n *node.Node) {
count++
fmt.Println("count : "+strconv.Itoa(count))
})
tree.Do(func(n *node.Node) {
fmt.Println("value : "+strconv.Itoa(n.Value))
})
}
可以看出函数式编程比较灵活一些,可以灵活的做你想要做到的事情