Go语言实现二叉树(BinaryTree)
二叉树的操作原理:取第一个节点为根节点,比根节点小的数放在根节点的左子树(左节点),比根节点大的数放在根节点的右子数(右节点),取得的时候按照中序遍历的方式(左-中-右)。
使用go语言实现了二叉树的一些基本功能,存储节点数据的类型为int。(有什么建议或者不懂的地方可以留言)
实现代码如下:
//节点结构体
type Node struct {
data int
leftNode *Node
rightNode *Node
}
//二叉树结构体
type BinaryTree struct {
root *Node
count int
}
//查询时记录下标
var i int=0
//添加节点
func (node *Node)addNode(newNode *Node){
if node.data>newNode.data{
if node.leftNode==nil{
node.leftNode=newNode
}else{
node.leftNode.addNode(newNode)
}
}else{
if node.rightNode==nil{
node.rightNode=newNode
}else{
node.rightNode.addNode(newNode)
}
}
}
func (bt *BinaryTree)add(data int){
var newNode Node
newNode.data=data
if bt.root==nil{
bt.root=&newNode
}else{
bt.root.addNode(&newNode)
}
bt.count++
}
//遍历二叉树(中序:左-中-右),返回切片类型
func (node *Node)toArrayNode(datas []int){
if node.leftNode!=nil{
node.leftNode.toArrayNode(datas)
}
datas[i]=node.data
i++
if node.rightNode!=nil{
node.rightNode.toArrayNode(datas)
}
}
func (bt *BinaryTree)toArray()[]int{
if bt.root==nil{
return nil
}
datas:=make([]int,bt.count)
bt.root.toArrayNode(datas)
return datas
}
//返回该树的长度
func (bt *BinaryTree)size()int{
return bt.count
}
测试代码如下:
func main(){
var binaryTree BinaryTree
binaryTree.add(5)
binaryTree.add(11)
binaryTree.add(8)
binaryTree.add(9)
binaryTree.add(1)
binaryTree.add(3)
binaryTree.add(20)
fmt.Println(binaryTree.size())
fmt.Println(binaryTree.toArray())
}