黑马程序员技术交流社区

标题: 【上海校区】go 基础学习5 [打印本页]

作者: wuqiong    时间: 2018-7-20 10:00
标题: 【上海校区】go 基础学习5
概述代码

treeentry\entry.go

package main

import (

        "fmt"

        "golearn/tree"

)

type myTreeNode struct {

        node *tree.Node

}

func (myNode *myTreeNode) postOrder() {

        if myNode == nil || myNode.node == nil {

                return

        }

        left := myTreeNode{myNode.node.Left}

        right := myTreeNode{myNode.node.Right}

        left.postOrder()

        right.postOrder()

        myNode.node.Print()

}

func main() {

        var root tree.Node

        root = tree.Node{Value: 3}

        root.Left = &tree.Node{}

        root.Right = &tree.Node{5, nil, nil}

        root.Right.Left = new(tree.Node)

        root.Left.Right = tree.CreateNode(2)

        root.Right.Left.SetValue(4)

        fmt.Print("In-order traversal: ")

        root.Traverse()

        fmt.Print("My own post-order traversal: ")

        myRoot := myTreeNode{&root}

        myRoot.postOrder()

        fmt.Println()

        nodeCount := 0

        root.TraverseFunc(func(node *tree.Node) {

                nodeCount++

        })

        fmt.Println("Node count:", nodeCount)

        c := root.TraverseWithChannel()

        maxNodeValue := 0

        for node := range c {

                if node.Value > maxNodeValue {

                        maxNodeValue = node.Value

                }

        }

        fmt.Println("Max node value:", maxNodeValue)

}

node.go
package tree

import "fmt"

type Node struct {
        Value       int
        Left, Right *Node
}

func (node Node) Print() {
        fmt.Print(node.Value, " ")
}

func (node *Node) SetValue(value int) {
        if node == nil {
                fmt.Println("Setting Value to nil " +
                        "node. Ignored.")
                return
        }
        node.Value = value
}

func CreateNode(value int) *Node {
        return &Node{Value: value}
}
traversal.go
package tree

import "fmt"

func (node *Node) Traverse() {
        node.TraverseFunc(func(n *Node) {
                n.Print()
        })
        fmt.Println()
}

func (node *Node) TraverseFunc(f func(*Node)) {
        if node == nil {
                return
        }

        node.Left.TraverseFunc(f)
        f(node)
        node.Right.TraverseFunc(f)
}

func (node *Node) TraverseWithChannel() chan *Node {
        out := make(chan *Node)
        go func() {
                node.TraverseFunc(func(node *Node) {
                        out <- node
                })
                close(out)
        }()
        return out
}

封装定义别名package queue

// A FIFO queue.
type Queue []int

// Pushes the element into the queue.
//                 e.g. q.Push(123)
func (q *Queue) Push(v int) {
        *q = append(*q, v)
}

// Pops element from head.
func (q *Queue) Pop() int {
        head := (*q)[0]
        *q = (*q)[1:]
        return head
}

// Returns if the queue is empty or not.
func (q *Queue) IsEmpty() bool {
        return len(*q) == 0
}

package main

import (
        "fmt"
        "golearn/queue"
)

func main() {
        q := queue.Queue{1}

        q.Push(2)
        q.Push(3)
        fmt.Println(q.Pop())
        fmt.Println(q.Pop())
        fmt.Println(q.IsEmpty())
        fmt.Println(q.Pop())
        fmt.Println(q.IsEmpty())
}






作者: 不二晨    时间: 2018-7-20 10:59
优秀,奈斯
作者: wuqiong    时间: 2018-7-24 16:44

作者: 梦缠绕的时候    时间: 2018-7-25 17:13

作者: 摩西摩西OvO    时间: 2018-7-26 10:36

作者: 不二晨    时间: 2018-7-26 11:41
奈斯,很赞
作者: 吴琼老师    时间: 2018-7-26 16:31





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2