package tree import "fmt" type Node struct {
elem interface{}
left, right *Node
} type Tree struct {
root *Node
} func NewTree() *Tree {
return &Tree{}
} // 添加元素
func (this *Tree) Add(v interface{}) {
node := &Node{elem: v}
if this.root == nil {
this.root = node
return
} c := make(chan *Node, 10)
c <- this.root for len(c) > 0 {
curNode := <-c
if curNode.left == nil {
curNode.left = node
return
} else {
c <- curNode.left
}
if curNode.right == nil {
curNode.right = node
return
} else {
c <- curNode.right
}
}
} // 广度优先遍历
func (this *Tree) Travel() {
if this.root == nil {
fmt.Println("empty tree")
return
} c := make(chan *Node, 10)
c <- this.root for len(c) > 0 {
curNode := <-c
fmt.Println(curNode.elem)
if curNode.left != nil {
c <- curNode.left
}
if curNode.right != nil {
c <- curNode.right
}
}
} // 先序遍历
func (this *Tree) Xianxu() {
xz(this.root)
} // 中序遍历
func (this *Tree) ZhongXu() {
zx(this.root)
} // 后序遍历
func (this *Tree) HouXu() {
hx(this.root)
} func xz(node *Node) {
if node == nil {
return
}
fmt.Println(node.elem)
xz(node.left)
xz(node.right)
} func zx(node *Node) {
if node == nil {
return
}
zx(node.left)
fmt.Println(node.elem)
zx(node.right)
} func hx(node *Node) {
if node == nil {
return
}
hx(node.left)
hx(node.right)
fmt.Println(node.elem)
}