package main
import("container/list""fmt""math/rand")//written by jie_an_shao_zhu_chu_cheng on February 14, 2023type node struct{
val int
left, right *node
}funcinsert(val int, root *node)*node {
if root ==nil{
return&node{
val,nil,nil}}if val < root.val {
root.left =insert(val, root.left)}else{
root.right =insert(val, root.right)}return root
}//先序遍历funcpreOrder(t *node){
stack :=make([]*node,0)forlen(stack)>0|| t !=nil{
if t !=nil{
stack =append(stack, t)
fmt.Printf("%v ", t.val)
t = t.left
}else{
t = stack[len(stack)-1]
stack = stack[:len(stack)-1]
t = t.right
}}
fmt.Println()}//中序遍历funcinOrder(t *node){
stack :=make([]*node,0)forlen(stack)>0|| t !=nil{
if t !=nil{
stack =append(stack, t)
t = t.left
}else{
t = stack[len(stack)-1]
fmt.Printf("%v ", t.val)
stack = stack[:len(stack)-1]
t = t.right
}}
fmt.Println()}//后序遍历funcpostOrder(t *node){
// l r m(reverse m r l)//reverse-preOrder
stack :=make([]*node,0)
arr :=make([]int,0)forlen(stack)>0|| t !=nil{
if t !=nil{
stack =append(stack, t)
arr =append(arr, t.val)
t = t.right
}else{
t = stack[len(stack)-1]
stack = stack[:len(stack)-1]
t = t.left
}}for i :=len(arr)-1; i >=0; i--{
fmt.Printf("%v ", arr[i])}
fmt.Println()}//层序遍历funcbfs(t *node){
queue := list.New()
queue.PushBack(t)for queue.Len()>0{
size := queue.Len()for i :=0; i < size; i++{
temp := queue.Remove(queue.Front()).(*node)
fmt.Printf("%v ", temp.val)if temp.left !=nil{
queue.PushBack(temp.left)}if temp.right !=nil{
queue.PushBack(temp.right)}}}
fmt.Println()}funcmain(){
arr :=make([]int,0)for i :=1; i <=10; i++{
arr =append(arr, i)}
rand.Shuffle(len(arr),func(i, j int){
arr[i], arr[j]= arr[j], arr[i]})
fmt.Println(arr)var root *node
for i :=0; i <len(arr); i++{
root =insert(arr[i], root)}preOrder(root)inOrder(root)postOrder(root)bfs(root)}