搜索二叉树
package main
import (
“fmt”
)
type Tree struct {
data int
root *Tree
left *Tree
right *Tree
}
// 创建二叉树
func (tree *Tree) create_binary_tree(data int) {
var node = &Tree{}
node.data = data
if tree.root == nil {
tree.root = node
} else {
// 找到需要插入的节点
var back_node = &Tree{}
var current_node = tree.root
for current_node != nil {
back_node = current_node
if current_node.data > data {
current_node = current_node.left
} else {
current_node = current_node.right
}
}
// 插入该节点
if back_node.data > data {
back_node.left = node
} else {
back_node.right = node
}
}
}
// 遍历二叉树
func (tree *Tree) pre_travel_binary_tree(root *Tree) {
if root != nil {
tree.pre_travel_binary_tree(root.left)
fmt.Println(root.data)
tree.pre_travel_binary_tree(root.right)
}
}
func main() {
var tree = Tree{}
var arr = […]int{ 7,4,2,3,15,35,6,45,55,20,1,14,56,57,58 }
for i := 0; i < len(arr); i++ {
tree.create_binary_tree(arr[i])
}
// tree.data, tree.left, tree.right都是没有值的
// 也就是第一层是没有值的
// 存放在tree.root.data, tree.root.left, tree.root.right中
// 第二层存放在tree.root.left.data, tree.root.left.left, tree.root.left.right中
// 除了一个层的tree.root有值之外,其他root都没有值
tree.pre_travel_binary_tree(tree.root)
}
[/go]