GO中二叉树的实现必知必会

前言

如果你是一个开发人员,或多或少对树型结构都有一定的认识,我个人对树型数据结构是又爱又恨。二叉树作为树的一种,是一种重要的数据结构,也是面试官经常考的东西。这篇文章主要分享下关于二叉树相关的知识点,并用go语言实现一个二叉树和对二叉树进行遍历。

二叉树概念

二叉树是具有两个节点的树形结构,通常左边的子树被称为左子树,右边的子树称为右子树,图示如下:


在代码中我们可以用代码来定义一个二叉树结构:

type treeNode struct { Val string //节点值 left *treeNode //左节点 right *treeNode //右节点 }

二叉树的性质

  • 若二叉树结点的层次从1开始,则在二叉树第i层最多有2i-1 (i > 0)个节点。
  • 深度为k的二叉树至少有k个结点,最多有2i - 1个结点。
  • 对任何一个二叉树,如果其叶结点有n0 个,度为2的非叶结点有n2 个,则有 n0 = n2 + 1
  • 具有n个结点的完全二叉树的深度为⌈log2(𝑛+1)⌉

创建二叉树

// 创建节点 func CreateBinaryTree(data string) *treeNode { return &treeNode{data, nil, nil}
} // 插入节点 func (node *treeNode) Insert(n *treeNode, data string) bool {
    cur := n for cur != nil { if cur.Val < data { if cur.Right != nil {
                cur = cur.Right
            } else {
                cur.Right = CreateBinaryTree(data) return true }
        } else { if cur.Left != nil {
                cur = cur.Left
            } else {
                cur.Left = CreateBinaryTree(data) return true }
        }
    } return false }

树的遍历

树的遍历分为三种方式,分别为前序遍历,中序遍历,后序遍历。

前序遍历(V-L-R)

前序遍历访问顺序为先输 root 结点,然后再输出左子树,然后再输出右子树。

我们通过递归的方式进行遍历


func preOrder(root *bt) { if root != nil {
        fmt.Print(root.Val, " ")
        preOrder(root.Left)
        preOrder(root.Right)
    }
}

中序遍历(L-V-R)

中序遍历访问顺序为先输出 root 的左子树,再输 root 结点,最后输出 root 的右子树。


func inOrder(root *bt) { if root != nil {
        inOrder(root.Left)
        fmt.Print(root.Val, " ")
        inOrder(root.Right)
    }
}

后序遍历(L-R-V)

后序遍历访问顺序为先输出 root 的左子树,最后输出 root 的右子树,再输 root 结点。


func posOrder(root *bt) { if root != nil {
        posOrder(root.Left)
        posOrder(root.Right)
        fmt.Print(root.Val, " ")
    }
}
#java#
全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 12:11
我最近都有点不想活了,天天早10晚11的,还问我爱不爱她目前的状态别说爱谁了,没扇谁就不错了。是不是大家都是一进节子,只有工作没有爱情了
AzureSkies:在字节的时候找的就是字节的,飞书太适合恋爱人士了,能看到是不是已读,是不是在会议中。简直冥婚好伴侣
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
06-25 21:00
门头沟学院 Java
多拆解背记一下当前的高频场景面试题,结合自己的项目经历去作答,面试通过率原来真的不会低!
牛客96559368...:小公司不就是这样的吗,面试要么是点击就送,要么就是往死里拷打,没有一个统一的标准。这个不能代表所有公司
点赞 评论 收藏
分享
06-18 13:28
已编辑
门头沟学院 Web前端
爱睡觉的冰箱哥:《给予你300的工资》,阴的没边了
点赞 评论 收藏
分享
大飞的诡术妖姬:之前看b站多明海有个说法,日本就业竞争非常低的原因不光是毕业学生少,还有很多人干两年不喜欢职场氛围就辞职躺平,位置也空了很多,论吃苦耐劳还得看咱们
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务