一 代码
package main
import (
"fmt"
)
type Hero struct {
No int
Name string
Left *Hero
Right *Hero
}
// 前序遍历:先输 root 结点,然后再输出左子树,然后再输出右子树
func PreOrder(node *Hero) {
if node != nil {
fmt.Printf("no=%d name=%s\n", node.No, node.Name)
PreOrder(node.Left)
PreOrder(node.Right)
}
}
// 中序遍历:先输出 root 的左子树,再输 root 结点,最后输出 root 的右子树
func InfixOrder(node *Hero) {
if node != nil {
InfixOrder(node.Left)
fmt.Printf("no=%d name=%s\n", node.No, node.Name)
InfixOrder(node.Right)
}
}
// 后序遍历:先输出 root 的左子树,最后输出 root 的右子树,再输 root 结点
func PostOrder(node *Hero) {
if node != nil {
PostOrder(node.Left)
PostOrder(node.Right)
fmt.Printf("no=%d name=%s\n", node.No, node.Name)
}
}
func main() {
// 构建一个二叉树
root := &Hero{
No: 1,