go实现二叉树

一 代码

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,
      Name: "宋江",
   }
   left1 := &Hero{
      No:   2,
      Name: "吴用",
   }
   node10 := &Hero{
      No:   10,
      Name: "tom",
   }
   node12 := &Hero{
      No:   12,
      Name: "jack",
   }
   left1.Left = node10
   left1.Right = node12
   right1 := &Hero{
      No:   3,
      Name: "卢俊义",
   }
   root.Left = left1
   root.Right = right1
   right2 := &Hero{
      No:   4,
      Name: "林冲",
   }
   right1.Right = right2
   // PreOrder(root)
   // InfixOrder(root)
   PostOrder(root) // 后序遍历
}

二 测试

no=10 name=tom
no=12 name=jack
no=2 name=吴用
no=4 name=林冲
no=3 name=卢俊义
no=1 name=宋江

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值