拿下面这个树举例
牢记三种遍历的规则:注意这里面的前中后指的是跟节点的遍历顺序
- 先(前)序:跟左右
- 中序:左右根
- 后序:左右跟
代码实现采用go语言,利用的递归
package main
import "fmt"
// 二叉树三种遍历方式
type node struct {
value string
leftNode *node
rightNode *node
}
func main() {
n := node{}
node := n.newTree()
n.bShow(node)
fmt.Print("\n")
n.mShow(node)
fmt.Print("\n")
n.lShow(node)
}
// 前序遍历 根左右
func (n *node) bShow(node *node) {
if node != nil {
fmt.Print(node.value)
n.bShow(node.leftNode)
n.bShow(node.rightNode)
}
}
// 中序遍历 左根右
func (n *node) mShow(node *node) {
if node != nil {
n.mShow(node.leftNode)
fmt.Print(node.value)
n.mShow(node.rightNode)
}
}
// 前序遍历 左右根
func (n *node) lShow(node *node) {
if node != nil {
n.lShow(node.leftNode)
n.lShow(node.rightNode)
fmt.Print(node.value)
}
}
// 构造二叉树 返回根节点
func (n *node) newTree() *node {
nodeA := &node{
value: "A",
}
nodeB := &node{
value: "B",
}
nodeC := &node{
value: "C",
}
nodeD := &node{
value: "D",
}
nodeE := &node{
value: "E",
}
nodeF := &node{
value: "F",
}
nodeG := &node{
value: "G",
}
nodeH := &node{
value: "H",
}
nodeI := &node{
value: "I",
}
nodeJ := &node{
value: "J",
}
nodeK := &node{
value: "K",
}
nodeA.leftNode = nodeB
nodeA.rightNode = nodeC
nodeB.leftNode = nodeD
nodeB.rightNode = nodeE
nodeC.leftNode = nodeF
nodeC.rightNode = nodeG
nodeD.rightNode = nodeH
nodeE.rightNode = nodeI
nodeF.leftNode = nodeJ
nodeF.rightNode = nodeK
return nodeA
}
前序:ABDHEICFJKG
中序:DHBEIAJFKCG
后续:HDIEBJKFGCA