package main
import (
"unsafe"
"fmt"
"math/rand"
"time"
)
type TreeNode struct {
x int
lchild *TreeNode
rchild *TreeNode
}
type Tree TreeNode
func appendNode(node *TreeNode,x int) {
if x>=node.x {
if node.lchild==nil {
node.lchild=&TreeNode{x,nil,nil}
} else {
appendNode(node.lchild,x)
}
} else {
if node.rchild==nil {
node.rchild=&TreeNode{x,nil,nil}
} else {
appendNode(node.rchild,x)
}
}
}
func createTree(x []int) *Tree {
root:=&TreeNode{x[0],nil,nil}
for i:=1; i<len(x); i++ {
appendNode(root,x[i])
}
return (*Tree)(unsafe.Pointer(root))
}
func travel(tree *Tree) {
root:=(*TreeNode)(unsafe.Pointer(tree))
if root.lchild!=nil {
travel((*Tree)(unsafe.Pointer(root.lchild)))
}
fmt.Print(root.x," ")
if root.rchild!=nil {
travel((*Tree)(unsafe.Pointer(root.rchild)))
}
}
func main() {
rand.Seed(time.Now().UnixNano())
x:=make([]int,10)
for i:=0; i<len(x); i++ {
x[i]=rand.Intn(100)
}
fmt.Println(x)
tree:=createTree(x)
travel(tree)
}