Hello,各位小伙伴大家好,我是小栈君,今天给大家带来的分享是关于关于二叉树相关的知识点,并用go语言实现一个二叉树。我们主要针对二叉树的概念,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 }
以上代码我们我们定义了一个树节点,并且增加了相关的增加的节点的方法,细心的小伙伴可能已经看出来了,我们增加左节点和增加右节点的方法并不相同,那是因为在go语言中我们不仅可以写通用方法,比如增加二叉树左节点addLeftNode 方法。
我们还可以指定仅为treeNode专属方法addRightNode。
我们在添加了很多节点后,如果是采用传统的print打印出来的结果,如下图所示
// 定义一个树的节点 [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、等系列专题。原创不易,更新较慢,多多包涵。 希望与你共同成长。我们下期再见啦,拜了个拜~
▼ 往期精彩回顾 ▼ mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL) Go语言入门教程(二) Go语言入门教程(三) Go语言系列教程(四) Go语言系列教程(五) Go语言系列教程(六)