Go语言实现二叉树遍历
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言实现二叉树遍历相关的知识,希望对你有一定的参考价值。
参考技术A 图例如下:结果应该是分别是:
广度优先: a -> b -> c -> d -> f -> e -> g
先序遍历: a -> b -> d -> e -> f -> g -> c
中序遍历: e -> d -> b -> g -> f -> a -> c
后序遍历: e -> d -> g -> f -> b -> c -> a
结果存在result里面,如果不存可以少一层变量
这个地方强烈建议读一下下面的第一个链接,我遵照着那篇文章实现的,只是用Go改写了而已。
首先定义一个数据结构,用来存储一些Node的信息。
这里是可以运行的,但是总会抛出一个数组越界的错误,我看了半天也没看出来哪里有问题,Mac版的devel我这边又有bug,没用起来。至少思路对了,我后面再看一下哪里的问题。(感谢 @RiXu 指正)
go语言浅析二叉树
// 定义一个树的节点 [IT干货栈]
type treeNode struct {
name string // 定义树的名称
left *treeNode // 左节点
right *treeNode // 右节点
}
// It干货栈
func main() {
var node = treeNode{
name: "It干货栈",
left: &treeNode{
name: "It",
left: nil
},
right: &treeNode{name: "干货"}}
addLeftNode(&node, 2)
addLeftNode(node.left, 3)
addLeftNode(node.left.left, 4)
addLeftNode(node.left.left.left, 5)
node.addRightNode(2)
node.right.addRightNode(3)
node.right.right.addRightNode(4)
node.right.right.right.addRightNode(5)
fmt.Println(node)
}
// 增加二叉树左节点
func addLeftNode(node *treeNode, value int) {
children := treeNode{name: fmt.Sprintf("子节点%s%d", "It干货栈", value)}
node.left = &children} // 增加二叉树右节点
func (node *treeNode)
addRightNode(value int) {
children := treeNode{name: fmt.Sprint("关注公众号", value),left: nil,right: nil,}
node.right = &children
}
// 定义一个树的节点 [IT干货栈]
type treeNode struct {
name string // 定义树的名称
left *treeNode // 左节点
right *treeNode // 右节点
}
// It干货栈
func main() {
var node = treeNode{name: "It干货栈", left: &treeNode{name: "It", left: nil}, right: &treeNode{name: "干货"}}
addLeftNode(&node, 2)
addLeftNode(node.left, 3)
addLeftNode(node.left.left, 4)
addLeftNode(node.left.left.left, 5)
node.addRightNode(2)
node.right.addRightNode(3)
node.right.right.addRightNode(4)
node.right.right.right.addRightNode(5)
traversal(&node)}
// 遍历
func traversal(node *treeNode) {
if node == nil {
return
}
traversal(node.left)
traversal(node.right)
fmt.Println("名称", node.name)
}
// 增加二叉树左节点
func addLeftNode(node *treeNode, value int) {
children := treeNode{name: fmt.Sprintf("子左节点->%s%d", "It干货栈", value)}
node.left = &children
}
// 增加二叉树右节点
func (node *treeNode) addRightNode(value int) {
children := treeNode{
name: fmt.Sprint("子右节点->关注公众号", value),
left: nil,right: nil,}
node.right = &children
}
好了,今天的分享就到这啦,如果你喜欢我的分享,麻烦你点击一个好看或赞,我是小栈君,不定期分享IT干货,包括但不限于区块链、大数据、Python、go、等系列专题。原创不易,更新较慢,多多包涵。希望与你共同成长。我们下期再见啦,拜了个拜~
以上是关于Go语言实现二叉树遍历的主要内容,如果未能解决你的问题,请参考以下文章