Golang数据结构-树

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang数据结构-树相关的知识,希望对你有一定的参考价值。

参考技术A 二叉树是n(n>=0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成

golang的树结构三种遍历方式

package main

import "log"

type node struct {
	Item  string
	Left  *node
	Right *node
}

type bst struct {
	root *node
}

/*
        m
     k     l
  h    i     j
a  b  c  d  e  f


//先序遍历(根左右):m k h a b i c d l j e f

//中序遍历(左根右):a h b k c i d m l e j f

//后序遍历(左右根):a b h c d i k e f j l m

*/

func (tree *bst) buildTree() {

	m := &node{Item: "m"}
	tree.root = m

	k := &node{Item: "k"}
	l := &node{Item: "l"}
	m.Left = k
	m.Right = l

	h := &node{Item: "h"}
	i := &node{Item: "i"}
	k.Left = h
	k.Right = i

	a := &node{Item: "a"}
	b := &node{Item: "b"}
	h.Left = a
	h.Right = b

	c := &node{Item: "c"}
	d := &node{Item: "d"}
	i.Left = c
	i.Right = d

	j := &node{Item: "j"}
	l.Right = j

	e := &node{Item: "e"}
	f := &node{Item: "f"}

	j.Left = e
	j.Right = f

}

//先序遍历
func (tree *bst) inOrder() {

	var inner func(n *node)
	inner = func(n *node) {

		if n == nil {
			return
		}
		log.Println(n.Item)
		inner(n.Left)
		inner(n.Right)
	}

	inner(tree.root)
}

//中序
func (tree *bst) midOrder() {

	var inner func(n *node)
	inner = func(n *node) {

		if n == nil {
			return
		}
		inner(n.Left)
		log.Println(n.Item)
		inner(n.Right)
	}

	inner(tree.root)
}

//后序
func (tree *bst) lastOrder() {

	var inner func(n *node)
	inner = func(n *node) {

		if n == nil {
			return
		}
		inner(n.Left)
		inner(n.Right)
		log.Println(n.Item)
	}

	inner(tree.root)
}
func main() {

	tree := &bst{}

	tree.buildTree()

	// tree.inOrder()
	tree.lastOrder()

}


以上是关于Golang数据结构-树的主要内容,如果未能解决你的问题,请参考以下文章

基数树RadixTree的golang实现

golang的树结构三种遍历方式

golang的树结构三种遍历方式

[golang] 数据结构-堆排序

数据结构和算法(Golang实现)(29)查找算法-2-3树和左倾红黑树

哈希表 Map Golang实现,使用红黑树和AVL树-性能爆表-非递归版本